从Socket服务器发送2图像

时间:2016-04-21 09:26:19

标签: java python sockets

我想从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()
  ....

1 个答案:

答案 0 :(得分:3)

接收者如何知道image1的结束位置?在您的代码中,客户端一直调用client_socket.recv,直到返回空字符串。直到套接字关闭才会发生这种情况。所以发生的事情是你正在传输两个图像,而客户端正在将两者的内容写入第一个文件。

第二个循环永远不会收到任何数据,因为一旦关闭,您将永远不会从套接字接收更多数据。

您需要(a)打开一个新套接字来传输第二个文件,或者(b)将每个文件的长度作为协议的一部分发送,以便客户端知道写入pathImage1的内容在继续pathImage2之前。