python
1import socket 2from sys import flags 3import numpy 4import cv2 5 6PORT = 50000 7BUFFER_SIZE = 4096*10 8 9buf = b'' 10 11 12def main(): 13 global buf 14 with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: 15 while True: 16 s.bind(("0.0.0.0", PORT)) 17 try: 18 data,address = s.recvfrom(BUFFER_SIZE) 19 if not data: 20 break 21 buf = buf + data 22 23 finally: 24 s.close() 25 narray=numpy.frombuffer(buf,dtype='uint8') 26 return cv2.imdecode(narray,1) 27 28while True: 29 img = main() 30 cv2.imshow('Capture',img) 31 if cv2.waitKey(100) & 0xFF == ord('q'): 32 break 33 buf = b''
↑サーバー
python
1import socket 2import cv2 3 4cap = cv2.VideoCapture(0) 5cap.set(cv2.CAP_PROP_FPS, 30) 6cap.set(3,320) 7cap.set(4,240) 8PORT = 50000 9BUFFER_SIZE = 4096 10with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: 11 while True: 12 ret, frame = cap.read() 13 if not ret: 14 break 15 16 jpegstring=cv2.imencode('.jpg', frame)[1].tobytes() 17 18 s.sendto(id + jpegstring,("****",PORT))
↑クライアント
一つのサーバーに二つのクライアントが実行されると一つの画像表示ウィンドウに交互に二つのカメラの画像が移ってしまいます。クライアントごとにウィンドウを表示したいです。
具体的に何をしたいのでしょうか? 「一つのポートで違うデータを受け取れない」「一つのサーバーに二つのクライアントが実行されると一つの画像表示ウィンドウに二つのカメラの画像が移ってしまいます。」は共に現状であって、何をどうしたいのかこの質問文では分かりません。プログラムをざっくり見る限りでは「そうだろうな」としか思えませんが(プログラムは書いたとおりにしか動きません)。なんとなくですがsocketの理解が足りていないようにも思えます。
参考)
https://teratail.com/help/question-tips#questionTips3-3
このページいちど全部目を通してほしいのですが、とくに「質問詳細の最初に実現したいことを書きましょう」をしっかり質問文に追記してください。
回答4件
あなたの回答
tips
プレビュー