[英]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.