Nov-01-2021, 06:25 PM
The code that I have already works. What I do is create two servers and two clients to open two different codes with different ports, because when I use the same port I get an error. But, the problem is the problem is that two windows open and that makes me think that consumption is higher (or am I wrong?). What I am looking for is to consume as little as possible, that is, to have one server.py and two clients (client-1.py and cliente-2.py).
My code is:
server.py
My code is:
server.py
import socket import cv2 import pickle import struct HOST='' PORT=8485 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) print('Socket created') s.bind((HOST,PORT)) print('Socket bind complete') s.listen(10) print('Socket now listening') conn,addr=s.accept() data = b"" payload_size = struct.calcsize(">L") print("payload_size: {}".format(payload_size)) while True: while len(data) < payload_size: print("Recv: {}".format(len(data))) data += conn.recv(4096) print("Done Recv: {}".format(len(data))) packed_msg_size = data[:payload_size] data = data[payload_size:] msg_size = struct.unpack(">L", packed_msg_size)[0] print("msg_size: {}".format(msg_size)) while len(data) < msg_size: data += conn.recv(4096) frame_data = data[:msg_size] data = data[msg_size:] frame=pickle.loads(frame_data, fix_imports=True, encoding="bytes") frame = cv2.imdecode(frame, cv2.IMREAD_COLOR) cv2.imshow('ImageWindow',frame) cv2.waitKey(1)client.py
import cv2 import socket import struct import pickle client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect(('0.0.0.0', 8485)) connection = client_socket.makefile('wb') cam = cv2.VideoCapture(0) cam.set(3, 320) cam.set(4, 240) img_counter = 0 encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90] while True: ret, frame = cam.read() result, frame = cv2.imencode('.jpg', frame, encode_param) # data = zlib.compress(pickle.dumps(frame, 0)) data = pickle.dumps(frame, 0) size = len(data) print("{}: {}".format(img_counter, size)) client_socket.sendall(struct.pack(">L", size) + data) img_counter += 1 c = cv2.waitKey(1) if c == 27: break cam.release() cv2.destroyAllWindows()As I said above, for the client-2.py I only use another port (the one that I previously write on the server).