파이썬 멀티소켓프로그래밍 질문입니다

조회수 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()

오픈 소스를 보고 멀티 클라이언트에서 서버로 영상을 보내고싶은데 연결은 되는거 같지만 캠화면이 뜨면 응답없음 오류가 나타납니다 혹시 어떤점이 문제인지 알 수 있을까요?

  • 서버쪽에서 보내주는 값이 없는데 클라이언트쪽에서 recv 대기상태에 빠져서 진행이 안될겁니다 김호원 2021.8.3 10:31

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)