0

我有一个连接到服务器的客户端,开始发送二进制数据,当它完成发送时,它关闭连接。如果连接关闭,则服务器知道客户端已完成发送文件。

我有一个简单的 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 ,所以我不清楚为什么我会遇到这个问题。谢谢!

4

1 回答 1

2

来自 MSDN 文档:

为确保在关闭套接字之前发送和接收所有数据,您应该在调用 Disconnect 方法之前调用 Shutdown。

可能值得一试。

否则,如果您的代码片段有任何指示(基于您对 的使用TcpC),您可能应该使用TcpClient.Close我相信会为您执行此操作的代码。

于 2012-03-18T02:04:31.857 回答