为Socket第三次发贴了
还是有一个疑问,C#写的Socket程序
客户端若直接关闭程序(不经过任何的关闭Socket操作)
服务器端会捕获一个错误,说异常关闭啥的
用Netstat 看一下端口连接情况,一切正常……
但客户端若用啥Close() Shutdonw(Both) BeginDisconnect() …… 等等,啥的
服务器端都会进入 Closing Close_Wait Time_Wait …… 等等状态!
难道C#的Socket就不能正常关闭么?
非得采用一端直接关闭程序这么极端?
有谁有好的方法或例程么? 学习一下了……
还是有一个疑问,C#写的Socket程序
客户端若直接关闭程序(不经过任何的关闭Socket操作)
服务器端会捕获一个错误,说异常关闭啥的
用Netstat 看一下端口连接情况,一切正常……
但客户端若用啥Close() Shutdonw(Both) BeginDisconnect() …… 等等,啥的
服务器端都会进入 Closing Close_Wait Time_Wait …… 等等状态!
难道C#的Socket就不能正常关闭么?
非得采用一端直接关闭程序这么极端?
有谁有好的方法或例程么? 学习一下了……
顺便在说了一下,IE本身也会有很多的80端口连接处理Close_Wait状诚…………
能给出一些示例代码,没有这些的么?
我在所有通讯异常的地方,都调用了下面这段代码,貌似还可以!if (client != null) // client 为 客户端 TcpClient 实例
{
if (client.Connected == true)
client.Client.Shutdown(SocketShutdown.Both);
if (networkStream != null) // NetworkStream 实例,需手动关闭
networkStream.Close();
client.Close();
}
isConnectSucess = false; // 标志连接已断开,下次使用是重新连接 Client
当 networkStream.EndRead(ar) 即异步读取回调的时候
若返回值为0,即读取了0个字节,是不是也可以认为连接中断或异常了,则抛出异常!
期待有经验的一起讨论学习一下!