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上接收消息还是发送消息都不会抛出异常!)。

 
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

tcp socket 网线断开判断

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

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

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

tcp socket 网线断开判断

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

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

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

树莓派第一次使用(笔记本+网线)

第一次使用树莓派,用网线与笔记本相连,通过Windows远程桌面操作树莓派。
  • Tavox
  • Tavox
  • 2017-04-30 10:40
  • 365

用光纤还是用网线 光纤局域网设备导购

无论是企业还是个人在网络布线的时候都认为光纤的应用成本太高,使用不划算的。其实我们要明确一点铜缆虽便宜,但不是万能的。当厂房、车间、仓库与办公室,机房间隔距离太大的情况下,是不得不使用光缆的因为普通的...

一条网线,不用路由器,多台笔记本电脑共享上网

1、首先,选择其中一台笔记本电脑作为主机,该主机需要正常的与网线连接,即可以正常的上网。 打开主机的 “网络连接”,选择“无线网络连接”,右键打开属性对话框,在“常规”选项卡下,双击“TCP/I...

mii-tool 判断网线有无插好

mii-tool 更改网络接口协商的方法; [root@localhost ~]# mii-tool --helpusage: mii-tool [-VvRrwl] [-A media,... | -...
  • 0210
  • 0210
  • 2011-06-20 16:26
  • 456

国标网线制作方法

第七代系统使用国标直通线,两种标准都可用 RJ-45连接器的线排列有两种方法,分别是568B和568A,我们常用 568B方式,排列见下图:    实际上在10M 100M网络中,仅仅使用12 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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