调用Socket.Receive后,C#Socket.Connected属性变为falseintbyte[]buffer=newbyte[128];套接字错误套接字错误;TcpClienttcpClient=tcpListener.AcceptTcpClient();tcpClient.Client.ReceiveTimeout=500;//#1//tcpClient.Client.Connected在这里是**真**。readCount=tcpClient.Client.Receive(buffer,0,buffer.Length,SocketFlags.None,outsocketError);//reacCount>0//tcpClient.Client.Connected在这里是**false**。如果#1替换为tcpClient.Client.Blocking=false;,则tcpClient.Client.Connected具有正确的值(true)。我已将Socket.ReceiveTime属性设置为100并调用了Socket.Receive()。Receive()返回一个大于零的整数值。毫无例外。在我完成复制缓冲区的工作后——我没有使用任何与Socket相关的方法——,Socket.Connected属性已更改为false。为什么?关键可能在于TcpClient.Connected真正做了什么:Connected属性获取自上次I/O操作以来客户端套接字的连接状态。当它返回false时,客户端套接字从未连接过,或者不再连接。因为Connected属性只反映最近操作时的连接状态,所以您应该尝试发送或接收消息以确定当前状态。此属性在消息发送失败后不再返回true。请注意此行为是设计使然。您无法可靠地测试连接状态,因为在测试和发送/接收之间的时间里,连接可能已经丢失。您的代码应该假设套接字已连接并优雅地处理失败的传输。所以当你没有阻塞时,当你检查连接值时,读取可能不完整,所以“连接”仍然是它的旧值。如果远程主机不再连接到套接字,就会发生这种情况。是否已超过连接另一端的超时?以上是C#学习教程:调用Socket.Receive后,C#Socket.Connected属性改为false。分享的所有内容,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——本文来自网络收藏,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
