[C#]关于事件驱动的SOCKET类的优化
来源:互联网 发布:hill climbing 算法 编辑:程序博客网 时间:2024/05/29 16:29
在上一篇《[C#]事件驱动的SOCKET类》的文章中,地址:http://blog.csdn.net/much0726/archive/2009/06/25/4296789.aspx,我简单写了一个客户端的SOCKET连接类,并将接收的数据通知到SOCKET事件和数据包事件中,由于本人经验的不足,在数据判断上出现一些问题,原来写的文章中,我也会注明下本篇对其进行的进一步修改:
不能将socket.Poll(-1, SelectMode.SelectRead)方法作为判断SOCKET是否可以读的标准,此方法不能检测某些类型的连接问题,例如,网络电缆中断或远程主机意外关闭。您必须尝试发送或接收数据以检测这些类型的错误。在CSDN的论坛上也有人指出这个问题了,并且在微软的MSDN上也有权威的解释:http://technet.microsoft.com/zh-cn/system.net.sockets.socket.poll.aspx.
我原来的代码在服务器上运行一段时间后(大概1天左右),会出现接收不到SOCKET数据的情况,我就在判断前后加上了日志跟踪,果然是这个方法判断上出了问题。在C#写的接收数据方法上并不需要多余的判断,只要直接使用socket.Receive()即可,如果接收的字节数为0或者抛出SocketException异常,就可以判断网络连接是否断开了。下面是修改后的代码:
小结
线程通知到上层事件后,外部事件挂接后,可以直接进行委托BeginInvoke(),在委托的方法中就可以直接操作界面控件了。
- [C#]关于事件驱动的SOCKET类的优化
- [C#]事件驱动的SOCKET类
- [C#]事件驱动的SOCKET类
- 关于事件驱动学习三 使用select的socket callback模型
- 关于socket通讯的server类(C#)
- 关于XML文档模型的事件驱动
- 关于事件驱动的学习二 select()
- c/c++里面的socket事件开发
- 关于事件驱动的学习三 自己手动写事件驱动
- 关于对事件驱动架构(event drive architecture)和事件驱动编程的理解。
- NET(C#):关于进程退出的事件
- NET(C#):关于进程退出的事件
- 关于事件驱动的学习一 异步IO aio
- 读书整理-关于.net内置事件的驱动原理浅析
- 事件驱动的比较
- java的事件驱动
- IOS_UITableview的事件驱动
- 事件驱动的思考
- js 实现下拉列表的重复利用
- 用xmlhttp和Java session监听改善站内消息系统,实现站内消息弹出窗口
- Session监听的应用
- Using Hook under WINCE
- 云一样的心情
- [C#]关于事件驱动的SOCKET类的优化
- 用PL/SQL发送邮件 (2) 中文
- 張愛玲的舊事
- Delphi第三方控件大测评
- mysql的C语言接口的使用
- 意甲开球啦
- operator new 滴使用
- CListCtrl选中颜色更改!
- Windows Mobile6.5下的Widget分析