🛜[KG_KAIROS] 파이썬_7 (Flask, Socket 통신)
장마라 그런가 눈뜨기가 힘드네요,,, 그래도 오늘 하루도 화이팅!!!
오늘은 ESP32 제어 전 HTML과 자바와 자바 Script에 대해 배웠습니다.
자바와 자바스크립트는 전혀 다른거죠!!
Java와 JavaScript의 다른 점은 무엇입니까?
Java와 JavaScript의 다른 점은 무엇입니까?
JavaScript 프로그래밍 언어는 Netscape, Inc.에서 개발했으며, Java 플랫폼의 일부가 아닙니다. JavaScript는 애플릿 또는 독립형 응용 프로그램을 생성하지 않습니다. 일반적으로 JavaScript는 HTML 문서 내에
www.java.com
자바에서 직접 확인해봤습니다,
자바는 서버 쪽의 개발에서 주로 이용되며, 자바스크립트는 인증이나 상호작용과 같은 클라이언트 쪽의 개발에 주로 사용됩니다. 자바스크립트로 작성된 코드는 바로 실행될 수 있지만 자바로 작성된 코드는 컴파일이 되어야 합니다.
그럼 바로 실습 갑시다.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'hello page'
@app.route('/uga')
def uga():
return '<H1 Hello <br> uga </H1>'
app.run(debug=True, port=8081)
이번엔 파이썬으로 짜는줄 알았는데 아니였습니다...
html 파일로 만들기 시작하더군요!!
html로 클라이언트를 만들고 파이썬으로 server를 구축해 나가기 시작했습니다.
이번엔 온도, 습도, 풍속을 알려주는 클라와 서버를 구현해보겠습니다.
from flask import Flask, render_template
import random
app = Flask(__name__)
@app.route('/')
def hello():
return ("hello")
@app.route('/index')
def render():
temp = random.randint(0,30)
humid=random.randint(0,100)
speed= random.randint(0,10)
data = {
'temp': temp,
'humid':humid,
'speed':speed
}
return render_template('index_first.html',**data)
app.run(port=5000, debug=True)
서버창 코드입니다.
<!DOCTYPE html>
<head>
<title> 가산 402 </title>
<SCRIPT language="JavaScript">
setTimeout("history.go(0)", 1000)
</SCRIPT>
</head>
<body>
<br>
<li>
<h1>온도:{{temp}} </h1>
<h1>습도:{{humid}}</h1>
<h1>풍속:{{speed}}</h1>
</li>
</body>
</html>
html코드입니다!!
온도,습도, 풍속이 랜덤하게 표시되는걸 알수 있습니다.
1초마다 계속 새로고침 되서 출력이 가능합니다!
밥묵고~ 오늘 오후에 할 스터디는
Socket통신 만들기
그전에 프로세스와 쓰레드 특징비교!
프로세스와 쓰레드, 차이점과 그 중요성
프로세스와 쓰레드, 차이점과 그 중요성우리 일상에서 컴퓨터는 수많은 프로그램을 동시에 실행하고, 각 프로그램 내에서도 여러 작업을 병행 처리합니다. 이 마법 같은 일이 어떻게 가능한지
lemonlog.tistory.com
서버와 클라이언트 코드 올려드리겠습니다.
# This is server code to send video frames over UDP
import cv2, imutils, socket
import numpy as np
import time
import base64
import select
BUFF_SIZE = 65536
server_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF,BUFF_SIZE)
host_name = socket.gethostname()
host_ip = '172.30.1.77'# socket.gethostbyname(host_name)
print(host_ip)
port = 9999
socket_address = (host_ip,port)
server_socket.bind(socket_address)
print('Listening at:',socket_address)
vid = cv2.VideoCapture(0) # replace 'rocket.mp4' with 0 for webcam
fps,st,frames_to_count,cnt = (0,0,20,0)
while True:
msg,client_addr = server_socket.recvfrom(BUFF_SIZE)
print('GOT connection from ',client_addr)
WIDTH=400
while(vid.isOpened()):
_,frame = vid.read()
frame = imutils.resize(frame,width=WIDTH)
encoded,buffer = cv2.imencode('.jpg',frame,[cv2.IMWRITE_JPEG_QUALITY,80])
message = base64.b64encode(buffer)
#readable, writeable, errors = select.select([server_socket,], [server_socket,], [], 5)
server_socket.sendto(message,client_addr)
frame = cv2.putText(frame,'FPS: '+str(fps),(10,40),cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2)
cv2.imshow('TRANSMITTING VIDEO',frame)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
server_socket.close()
break
if cnt == frames_to_count:
try:
fps = round(frames_to_count/(time.time()-st))
st=time.time()
cnt=0
except:
pass
cnt+=1
# This is client code to receive video frames over UDP
import cv2, imutils, socket
import numpy as np
import time
import base64
BUFF_SIZE = 65536
client_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
client_socket.setsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF,BUFF_SIZE)
host_name = socket.gethostname()
host_ip = '172.30.1.91'# socket.gethostbyname(host_name)
print(host_ip)
port = 9999
message = b'Hello'
client_socket.sendto(message,(host_ip,port))
fps,st,frames_to_count,cnt = (0,0,20,0)
while True:
packet,_ = client_socket.recvfrom(BUFF_SIZE)
data = base64.b64decode(packet,' /')
npdata = np.fromstring(data,dtype=np.uint8)
frame = cv2.imdecode(npdata,1)
frame = cv2.putText(frame,'FPS: '+str(fps),(10,40),cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2)
cv2.imshow("RECEIVING VIDEO",frame)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
client_socket.close()
cv2.destroyAllWindows()
break
if cnt == frames_to_count:
try:
fps = round(frames_to_count/(time.time()-st))
st=time.time()
cnt=0
except:
pass
cnt+=1
서버를 먼저 실행시키시고 클라이언를 실행시키셔야 작동이 됩니다!!
그리고 저의 IP를 안다면 같은 WIFI에서 화면을 공유할 수도 있답니다!!
물론 상대의 클라이언트에서 저의 IP를 입력해줘야 접속이 가능합니다.