gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:42:13 24 4
gpt4 key购买 nike

我正在通过套接字发送数据,但 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();
}
}

服务器.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
}

如果我将 Thread.sleep(2000) 放入 java while 循环中,则可以正确接收值。造成此行为的原因是什么以及如何解决它?

最佳答案

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

关于java - 为什么在 while 循环中重复调用 java tcp 套接字时不发送所有数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24992501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com