socket网络连接 try{}catch{}典型的异常处理但是由于相同的原因可能要很久才能重新开始侦听 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 通信双方以客户-服务器方式建立TCP连接,用于双方信息的相互提交。当信道上没有数据传输时,通信双方应每隔时间C发送链路检测包以维持此连接,当链路检测包发出超过时间T后未收到响应,应立即再发送链路检测包,再连续发送N-1次后仍未得到响应则断开此连接。当断开连接之后,每隔时间D向服务器发包检测网络是否可用,可用就维持连接 我还是回答你吧,不过你记住以后不要到C#版块来问什么SOCKET了,因为C#版块全部都是一些做WEB的垃圾,他们肯本不了解这些东西,只是可能了解一些。NET FRAMEWORK类库而已。好吧,最令人恐怖的是他们不了解不要紧,并且会告诉你一些幻想的,不切实际的,肯本就是一些令人呕吐的思路。基本上比如楼上的人就可以看得出来。简直就是一个垃圾大本营。 回答你问题的时候,插入广告:C#版块里都是垃圾。.Net的 Socket:当客户端连接到服务器,如果客户端调用 Socket.Close() 方法关闭 socket 连接,服务器的 Socket.Receive() 方法会返回 0 而不会抛出异常;如果客户端进程异常终止(例如直接杀死进程),没有在程序里调用 Socket 的 Close() 方法,则服务器的 Socket.Receive()方法会抛出连接中断的异常。至于异常具体情况自己去查Windows Sockets Error Codes。所谓的他吗的什么心跳,也不用自己在程序里去做这件事情,如果客户端的网络突然中断了(例如拔掉客户端网线),由于 Socket 缺省的 KeepAlive 时间是 2 小时,这时候服务器端的 Socket.Receive() 既不返回,也不会抛出异常。那么我们该怎么办呢?我们可以对当前 Socket 重新设置 KeepAlive 的时间来检查这种中断的情况:Socket sc = listeningSocket.Accept();int keepAlive = -1744830460; // SIO_KEEPALIVE_VALSbyte[] inValue = new byte[]{1,0,0,0, 0x10,0x27,0,0, 0xe8,0x03,0,0}; //True, 10 秒, 1 秒sc.IOControl(keepAlive, inValue, null);上面的程序设置 KeepAlive 为 10 秒,检查间隔为 1 秒。如果拨掉客户端网线,服务器的 Socket.Receive() 会在 10 秒后抛出异常。 楼主的问题,我草,也真他吗的菜,你他吗的不会循环监听连接吗,我靠,去死吧。while(true){ socket.Accept();} 楼上的菜鸟帅哥说得一点都没有错,C#版,甚至整个。NET版都是垃圾,就是一个垃圾大本营,哈哈。这些垃圾们以为自己很牛B,其实不防告诉你们,MS的。NET战略其实就是要把你们塑造一堆垃圾罢了。 mygod_good(菜鸟之非常菜),你高估了楼主的问题了,呵呵。不过你对。NET的SOCKET理解在下佩服,你的解释让我解开了判断SOCKET断连的问题,致敬。 关于SOCKET判断连接的问题C#版不知道多少人讨论,所谓的什么星星也有不少,都是说一堆没用的垃圾东西,哎,可以想象垃圾有多少。 凡是BS别人的人自己本身就是垃圾RT 高分请教用C#枚举电脑的音频设备,并用指定的音频设备播放音频 FileUpload上传大小问题 visual studio 2008 输出控件怎么换行? 想做一个邮件系统 .Net程序员会什么技术 能不能读取一行txt文本再随机插入几个字到我读取的一行中 如何给列表属性List赋值? 如何可以把DataGrid某一些cell设置为不可以编辑,只能读? 一个很不错的.NET站点 关于网络监控问题,想断开连接本机的某个ip地址 求助:(Exception from HRESULT: 0x80131417)
当断开连接之后,每隔时间D向服务器发包检测网络是否可用,可用就维持连接
用 Socket.Close() 方法关闭 socket 连接,服务器的 Socket.Receive() 方法
会返回 0 而不会抛出异常;如果客户端进程异常终止(例如直接杀死进程),
没有在程序里调用 Socket 的 Close() 方法,则服务器的 Socket.Receive()
方法会抛出连接中断的异常。至于异常具体情况自己去查Windows Sockets Error Codes。
所谓的他吗的什么心跳,也不用自己在程序里去做这件事情,
如果客户端的网络突然中断了(例如拔掉客户端网线),由于 Socket 缺
省的 KeepAlive 时间是 2 小时,这时候服务器端的 Socket.Receive() 既不返
回,也不会抛出异常。那么我们该怎么办呢?
我们可以对当前 Socket 重新设置 KeepAlive 的时间来检查这
种中断的情况:
Socket sc = listeningSocket.Accept();
int keepAlive = -1744830460; // SIO_KEEPALIVE_VALS
byte[] inValue = new byte[]{1,0,0,0, 0x10,0x27,0,0, 0xe8,0x03,0,0}; //
True, 10 秒, 1 秒
sc.IOControl(keepAlive, inValue, null);
上面的程序设置 KeepAlive 为 10 秒,检查间隔为 1 秒。如果拨掉客户端网线,
服务器的 Socket.Receive() 会在 10 秒后抛出异常。
while(true)
{
socket.Accept();
}