簡體   English   中英

為什么在while循環中重復調用java tcp socket時,為什么不發送所有數據?

[英]Why doesnt java tcp socket send all data when called repeatetly in a while-loop?

我正在通過套接字發送數據,但是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),則可以正確接收值。 此行為可能是什么原因,我該如何解決?

就像我懷疑的那樣。 您完全忽略了recv()函數返回的值。 它可以是-1表示錯誤,也可以是0表示流的結尾,也可以是正整數表示接收的長度。 相反,您不僅假定讀取成功,而且還假定它返回以空值結尾的字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM