判断socket断开连接的方法

判断socket断开连接的方法,第1张

下面来罗列一下判断远端已经断开的方法

当recv()返回值小于等于0时,socket连接断开。但是还需要判断 errno是否等于 EINTR,如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接。

若使用了select等系统函数,若远端断开,则select返回1,recv返回0则断开。其他注意事项同法一。

设置后,若断开,则在使用该socket读写时立即失败,并返回ETIMEDOUT错误

法五:

自己实现一个心跳检测,一定时间内未收到自定义的心跳包则标记为已断开。

上面所说的方法,是直接利用winsock API编程时用的方法,如果用System.Net,可以这样来获得所accept的客户端的IP地址:

TcpClient client = myListener.EndAcceptTcpClient(ar)

IPAddress clientIP =((IPEndPoint)(client.Client.RemoteEndPoint)).Address

你可以用一个数组来保存各个已经连接的clientIP,在接受连接时进行判断,如果这个IP已经连接了,则拒绝接受连接。

拒绝接受连接的方法:

if (HaveBeenAccpeted(clientIP)) // 如果这个IP已经连接了{NetworkStream networkStream = client.GetStream()

networkStream.Close()// 马上断开这个TCP连接

socket建立连接失败会抛出异常,你只需要在catch里捕捉异常就可以了

catch(exception e)

{

System.out.println("服务器/客户端未连接")

return

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6737649.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存