我有一个连接到服务器的客户端,开始发送二进制数据,当它完成发送时,它关闭连接。如果连接关闭,则服务器知道客户端已完成发送文件。
我有一个简单的 tcp 类来处理连接。然后我有另一个向服务器发送数据的函数:
TcpC tcp = new TcpC();
void send_data_to_server(){
tcp.connect();
while(read_data){
tcp.sendData();
}
Thread.Sleep(500);
tcp.disconnect();
}
服务器使用异步套接字并具有一个函数 WaitForData() ,当客户端断开连接时会出现异常。问题是如果我删除 Thread.Sleep() WaitForData 仍然捕获异常,但 onDataReceive 仍然没有收到所有数据,因为我检查了异常中的缓冲区大小,它比我使用 Sleep() 时要小得多。
服务器将不得不处理许多这样的操作,我不能使用 Sleep() 'hack' 来让它工作。有时它无论如何都不起作用,我必须将睡眠间隔设置为几秒钟才能确定。除了 WaitForData() 之外,服务器端的其他异步函数都不会触发异常。
如何立即关闭连接并仍然获取所有数据?我虽然在发送所有数据之后调用 tcp.disconnect ,所以我不清楚为什么我会遇到这个问题。谢谢!