我想从Socket服务器(Java)向客户端套接字(python)发送2个映像。
- >我的问题我在客户端只收到一个Image(dataImage1)。
我做错了什么?
我连续发送(java)图像:
...
BufferedImage image = ImageIO.read (file);
imgstr = encodeToString(image, "png");
outToClient.writeBytes(imgstr);
...
BufferedImage chart = ImageIO.read (fileChart);
imgstrChart = encodeToString(chart, "png");
outToClient.writeBytes(imgstrChart);
...
我连续收到(python)图片:
...
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_addr = (tcpclient.host , tcpclient.port)
client_socket.connect( server_addr )
dataImage1 = client_socket.recv( 1024 )
fp = open ( pathImage1, "wb" )
while dataImage1:
#{
if not dataImage1: break
recvDataImage += dataImage1
dataImage1 = client_socket.recv( 1024 )
#}
fp.write(b64decode( recvDataImage1 ))
fp.flush()
fp.close()
dataImage2 = client_socket.recv( 1024 )
fp = open ( pathImage2, "wb" )
while dataImage2:
#{
if not dataImage2: break
recvDataImage2 += dataImage2
dataImage2 = client_socket.recv( 1024 )
#}
fp.write(b64decode( recvDataImage2 ))
fp.flush()
fp.close()
....
答案 0 :(得分:3)
接收者如何知道image1的结束位置?在您的代码中,客户端一直调用client_socket.recv
,直到返回空字符串。直到套接字关闭才会发生这种情况。所以发生的事情是你正在传输两个图像,而客户端正在将两者的内容写入第一个文件。
第二个循环永远不会收到任何数据,因为一旦关闭,您将永远不会从套接字接收更多数据。
您需要(a)打开一个新套接字来传输第二个文件,或者(b)将每个文件的长度作为协议的一部分发送,以便客户端知道写入pathImage1
的内容在继续pathImage2
之前。