Re: [问题] Socket keep-alive 连线

楼主: LaPass (LaPass)   2015-07-08 13:47:31
※ 引述《noapaov (单身汉)》之铭言:
: 请问一下, 假设Client 与 Server保持Socket连线, Client这边直接把网络线拔掉,
: 此时Server应该是无法收到Client断线的讯息, 因为没有完成4-way Handshake程序,
: 因此Server要如何判断Client已经断线呢?
: 我在网络上查询发现蛮多人使用 sendUrgentData(0xFF); (大陆称心跳包)
: 透过定时发送封包的方式, 来确认Client是否已经断线,
: 不知道大家也是用这个方式吗? 还是有其他方式呢?
: 谢谢
Socket s = new Socket();
s.setSoTimeout(30000);
s.setKeepAlive(true);
s.connect(address);
其实原理也是跟心跳包一样,只是一个是底层做掉,另外一个是自己写。
作者: qrtt1 (有些事,有时候。。。)   2015-07-08 13:54:00
用 send 的会比较准,有些包在 NAT 内的环境会把你抓着连线
楼主: LaPass (LaPass)   2015-07-08 16:25:00
是没错,我也习惯自己写心跳包
作者: dou0228 (7777)   2015-07-08 17:27:00
送一个不被 Client/Server 认定为有用的封包加上判定 socket timeout 即可但送的时间要比 socket timeout 早

Links booklink

Contact Us: admin [ a t ] ucptt.com