イメージを変更してクライアントに送り返すコードをサーバーに送信しようとしました。イメージを長さ1024のチャンクで送信します。サーバー側でOpencvを使用してイメージを編集し、イメージをクライアントに送り返すことでした。しかし、私のクライアントコードは、画像を受信する直前に実行を停止します。私はこれが同期化の問題だと感じています。サーバが画像ファイルを作成する前に、クライアントはrecvを呼び出します(Client.py)。 私のサーバー側のコード:Pythonでのソケットプログラミングによる画像の送信と取得
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(('', serverPort))
serverSocket.listen(1)
print("Server is ready to service...")
while 1:
connectionSocket, addr = serverSocket.accept()
res = ''
while 1:
t = connectionSocket.recv(1024)
if not t:
break
res += t
g = open("Client.jpg", "wb")
g.write(res)
g.close()
print("Image received and recreated")
f = open("Client.jpg", "rb")
#print(len(f))
print("Sending image data...")
while 1:
print("In while")
#data = f.read(1024)
if not data:
break
connectionSocket.send(data)
print("Data sent:"+str(len(data)))
connectionSocket.close()
クライアント側のコード:
from socket import *
import time
serverName = 'localhost'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName, serverPort))
Image = open("BG.jpg", "rb")
print("Sending image data...")
while 1:
data = Image.read(1024)
if not data:
break
clientSocket.send(data)
#print(len(data))
print("Data has been sent!")
print("-------------------")
time.sleep(3)
print("Receving data")
res = ''
while 1:
print("in while")
t = clientSocket.recv(1024)
print(len(t))
if not t:
break
res += t
g = open("Response.jpg", "wb")
g.write(res)
g.close()
clientSocket.close()
私は任意のより多くの情報を提供しなければならない場合は私に知らせてください。
両側の出力はそれほど大きくありません。クライアント側で 出力:サーバー側での
Sending image data...
Data has been sent!
-------------------
Receving data
in while
出力:
Server is ready to service...
Image received and recreated
Sending image data...
In while
私はそれを中断する前に、約2分間のコードを実行させた後、これが出力されます。
あなたもプログラムの出力を投稿できますか? –
私はそうしました。 –