【发布时间】:2010-11-03 21:44:26
【问题描述】:
int readCount;
byte[] buffer = new byte[128];
SocketError socketError;
TcpClient tcpClient = tcpListener.AcceptTcpClient();
tcpClient.Client.ReceiveTimeout = 500; // #1
// tcpClient.Client.Connected is **true** here.
readCount = tcpClient.Client.Receive(buffer, 0, buffer.Length, SocketFlags.None, out socketError); // reacCount > 0
// tcpClient.Client.Connected is **false** here.
如果将 #1 替换为 tcpClient.Client.Blocking = false;,则 tcpClient.Client.Connected 具有正确的值(true)。
我已将 Socket.ReceiveTime 属性设置为 100 并调用了 Socket.Receive()。 Receive() 返回大于零的整数值。没有发生异常。
在我使用复制的缓冲区完成工作之后——我没有使用任何与 Socket 相关的方法——Socket.Connected 属性已更改为 false。
为什么?
【问题讨论】:
-
你检查过 SocketError 吗?