再议Socket…………

孤独的行者牛 2011-05-13 03:27:45
为Socket第三次发贴了
还是有一个疑问,C#写的Socket程序
客户端若直接关闭程序(不经过任何的关闭Socket操作)
服务器端会捕获一个错误,说异常关闭啥的
用Netstat 看一下端口连接情况,一切正常……
但客户端若用啥Close() Shutdonw(Both) BeginDisconnect() …… 等等,啥的
服务器端都会进入 Closing Close_Wait Time_Wait …… 等等状态!
难道C#的Socket就不能正常关闭么?
非得采用一端直接关闭程序这么极端?
有谁有好的方法或例程么? 学习一下了……
...全文
116 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤独的行者牛 2011-05-16
  • 打赏
  • 举报
回复
Csdn被太多无聊的问题占据了,真正需要帮助和讨论的问题,却被淹死了……
MyCodex 2011-05-16
  • 打赏
  • 举报
回复
楼主应该用的是同步连接方法吧,如果使用异步方法不会产生这样的异常。但还要看异步同讯方法是否适合楼主。
孤独的行者牛 2011-05-15
  • 打赏
  • 举报
回复
另外还有一点,想请教一下:
当 networkStream.EndRead(ar) 即异步读取回调的时候
若返回值为0,即读取了0个字节,是不是也可以认为连接中断或异常了,则抛出异常!
期待有经验的一起讨论学习一下!
孤独的行者牛 2011-05-15
  • 打赏
  • 举报
回复
我现在的核心代码,请点评一下:
我在所有通讯异常的地方,都调用了下面这段代码,貌似还可以!

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


zhiyi_zhou001 2011-05-13
  • 打赏
  • 举报
回复
貌似你的思维跟正常人相反...我们都认为“用啥Close() Shutdonw(Both) BeginDisconnect() …… 等等,啥的”才叫正常关闭...
孤独的行者牛 2011-05-13
  • 打赏
  • 举报
回复
楼上说是对的,但发现,无论怎么组合,服务器端都会有Closing,Close_Wait...等异常状态
能给出一些示例代码,没有这些的么?
vrhero 2011-05-13
  • 打赏
  • 举报
回复
貌似你的思维跟正常人相反...我们都认为“用啥Close() Shutdonw(Both) BeginDisconnect() …… 等等,啥的”才叫正常关闭...
孤独的行者牛 2011-05-13
  • 打赏
  • 举报
回复
自已顶一下
顺便在说了一下,IE本身也会有很多的80端口连接处理Close_Wait状诚…………

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧