为什么java tcp socket在while循环中重复调用时不发送所有数据?

时间:2014-07-28 09:43:55

标签: java sockets tcp

我通过套接字发送数据,但java套接字似乎改变了排序和松散的数据,我无法修复它。 这是我的java代码:

Socket socket;
...
while(isSending){
  try {
    DataOutputStream out = new DataOutputStream(socket.getOutputStream());
    String data = getMyData();
    out.writeBytes(data);//data is a csv string parsed on server-side
    out.flush();
  } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  }
}

Server.cpp:

while(1){
    char recv_buffer[4096];
    memset(recv_buffer,0,4096);
    //receive data from socket
   int ret = recv(socket , recv_buffer , 4095 , 0);
   if (ret == 0){
      error_print("Socket not connected");
      ret = 0;
   } else if (ret < 0) {
      error_print("Error reading from socket!");
      ret = 0;
   }
  if(ret<=0) break;
  recv_buffer[ret]='\0';

  //parse recv_buffer
}

如果我在java while循环中放入Thread.sleep(2000),则会正确接收值。这种行为可能是什么原因,我该如何解决?

1 个答案:

答案 0 :(得分:1)

就像我怀疑的那样。您完全忽略了recv()函数返回的值。它可以是-1表示错误,或者零表示流的结束,或者是指示接收长度的正整数。相反,你不仅假设读取aucceeded而且它还返回一个以null结尾的字符串。