KG_KAIROS/Python

🛜[KG_KAIROS] 파이썬_7 (Flask, Socket 통신)

projectlim 2024. 7. 9. 17:23
728x90
반응형
SMALL

장마라 그런가 눈뜨기가 힘드네요,,, 그래도 오늘 하루도 화이팅!!!

 

 

 

오늘은 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)

네모 사각형을 Ctrl + 클릭!!
처음엔 hello page만 나오다가 주소창에 /uga를 추가하면 링크까지 나옵니다!!

 

이번엔 파이썬으로 짜는줄 알았는데 아니였습니다...

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

cmd창에서 ipconfig하면 주소가 나옵니다!!

 

서버와 클라이언트 코드 올려드리겠습니다.

# 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를 입력해줘야 접속이 가능합니다.

짝꿍,,,

 

728x90
반응형
LIST