Socket与拔掉网线

原创 2007年09月26日 10:50:00

Socket与拔掉网线

当客户端与服务端通过Tcp Socket进行通信时,如果客户端应用正常退出或异常退出,服务端都会在对应的连接上获取感知(如返回0、或抛出异常)。但是,如果客户端的网线被拔掉,那么,默认情况下,服务端需要在2个小时后才会感知客户端掉线。对于很多服务端应用程序来说,这么长的反应时间是不能忍受的。
    我们通常在应用层使用“心跳机制”来解决类似的问题,这是可行的。
    然而,在这里,我们可以使用Socket自己的心跳机制来解决这一问题。 System.Net.Sockets.Socket提供了IOControl()方法给我们来设置Sokect的心跳机制的相关参数。比如,我们设置KeepAlive的时间为20秒,检查间隔为2秒。可以这样做:

            int keepAlive = -1744830460; // SIO_KEEPALIVE_VALS
            byte[] inValue = new byte[] { 1, 0, 0, 0, 0x20, 0x4e, 0, 0, 0xd0, 0x07, 0, 0 }; //True, 20 秒, 2 秒
             sock.IOControl(keepAlive, inValue, null);

    20秒(20000毫秒)的16进制表示是4e20,2秒(2000毫秒)的16进制表示是07d0,如此,你可以修改inValue参数为自己希望的值。
    在上述设置下,如果拨掉客户端网线,服务器Socket.Receive()会在20秒后抛出异常(注意,在这20秒服务端内无论是从该socket上接收消息还是发送消息都不会抛出异常!)。

 

拔掉网线时Socket的检查方法

拔掉网线时Socket的检查方法 http://blog.csdn.net/fan_hai_ping/article/details/6699650 最近在做有关于TCP采集程序时,发现在...

java Socket 长链接拔网线检测

  • 2014年06月09日 13:18
  • 25KB
  • 下载

如何判断socket是否连接,异常断开拔出网线

setSoTimeout public void setSoTimeout(int timeout) throws SocketException 启用/禁用带...

tcp socket 网线断开判断

[喝小酒的网摘]http://blog.const.net.cn/a/17107.htm 有些网络应用在网线断开后重新连上的情况下 tcp socket 连接保持 ESTABLISH 状态不变, ...

tcp socket 网线断开判断

有些网络应用在网线断开后重新连上的情况下  tcp socket 连接保持 ESTABLISH 状态不变,[喝小酒的网摘]http://blog.const.net.cn/a/17107.htm ...
  • pb8
  • pb8
  • 2013年11月27日 17:51
  • 4785

tcp socket 网线断开判断

有些网络应用在网线断开后重新连上的情况下 tcp socket 连接保持 ESTABLISH 状态不变,[喝小酒的网摘]http://blog.const.net.cn/a/17107.htm ...
  • wjs1033
  • wjs1033
  • 2014年07月08日 10:24
  • 735

网络编程释疑之:TCP连接拔掉网线后会发生什么

背景:前些天团队在进行终端设备和服务器端长连接业务的测试时,发现了这么一个情况:在拔掉设备端的网线后,再插上网线,有时可以继续正常的进行长接连请求,而且用的还是拔掉网线之前的那个长连接。但是有时却不能...

网线线序排列以及八字口诀

普通网线线序一般都是按照橙白、橙、绿白、蓝、蓝白、绿、棕白、棕这个顺序排列的,也就是568B线序标准。而通常情况下百兆网络自用到其中的四根线,若是只有四根线的,则任选四根,做线时对应水晶头的1、2、3...
  • pastway
  • pastway
  • 2013年05月19日 18:27
  • 112999

两个路由器如何通过一根网线组建局域网(非wifi桥接方式)

有二种连接方法: 首先定义你的二台路由器,第一台为A路由器,第二台为B路由器。前提是A路由器已经设置好能正常上网(连接光纤接入或ADSL猫)。 方法1:WAN口连接。 1、改变第二个路由器的地址...

windows下文件共享以及通过网线在两台Windows电脑之间传数据

windows下文件共享设置: 1、首先在windows7环境下(windows8与windows10同) 2、点击任务栏右下角网络图标--打开网络和共享中心--更改高级共享设置 3、点...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Socket与拔掉网线
举报原因:
原因补充:

(最多只允许输入30个字)