파이썬 멀티소켓프로그래밍 질문입니다
조회수 607회
#server
import pickle
import struct
import threading
import time
import cv2
import socket
def handle_client(client_socket, addr):
print("주소 : ", addr)
data = b''
payload_size = struct.calcsize("L")
while True:
while len(data) < payload_size:
data += client_socket.recv(4)
packed_msg_size = data[:payload_size]
data = data[payload_size:]
msg_size = struct.unpack("L", packed_msg_size)[0]
while len(data) < msg_size:
data += client_socket.recv(4)
frame_data = data[:msg_size]
data = data[msg_size:]
frame = pickle.loads(frame_data)
cv2.imshow("frame", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
def accept_func():
global server_socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((HOST, PORT))
server_socket.listen(5)
while 1:
try:
client_socket, addr = server_socket.accept()
except KeyboardInterrupt:
server_socket.close()
t = threading.Thread(target=handle_client, args=(client_socket, addr))
t.daemon = True
t.start()
if __name__ == "__main__":
HOST = '127.0.0.1'
PORT = 8080
accept_func()
#client
import pickle
import socket
import struct
import cv2
if __name__ == "__main__":
HOST = '127.0.0.1'
PORT = 8080
capture = cv2.VideoCapture(0)
while True:
ret, frame = capture.read()
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((HOST, PORT))
data = pickle.dumps(frame)
message_size = struct.pack("L", len(data))
client_socket.sendall(message_size + data)
receive_data = client_socket.recv(1024)
client_socket.close()
오픈 소스를 보고 멀티 클라이언트에서 서버로 영상을 보내고싶은데 연결은 되는거 같지만 캠화면이 뜨면 응답없음 오류가 나타납니다 혹시 어떤점이 문제인지 알 수 있을까요?
댓글 입력