【发布时间】:2017-05-22 09:40:14
【问题描述】:
我尝试编写代码将图像发送到服务器,服务器对其进行修改并将其发送回客户端。我以长度为 1024 的块发送图像。想法是在服务器端使用 Opencv 进行一些图像编辑,然后将图像发送回客户端。但是,我的客户端代码每次在接收图像之前都会暂停执行。我有一种感觉,这是一个同步问题。客户端在服务器创建图像文件(Client.py)之前调用recv。 我的服务器端代码:
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
这是我让代码运行大约两分钟然后中断它之后的输出。
【问题讨论】:
-
你能把程序的输出也贴出来吗?
-
我已经这样做了。