作者LaPass (LaPass)
看板java
标题Re: [问题] Socket keep-alive 连线
时间Wed Jul 8 13:47:31 2015
※ 引述《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);
其实原理也是跟心跳包一样,只是一个是底层做掉,另外一个是自己写。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 125.227.87.115
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1436334454.A.124.html
1F:→ qrtt1: 用 send 的会比较准,有些包在 NAT 内的环境会把你抓着连线 07/08 13:54
2F:→ LaPass: 是没错,我也习惯自己写心跳包 07/08 16:25
3F:→ dou0228: 送一个不被 Client/Server 认定为有用的封包 07/08 17:27
4F:→ dou0228: 加上判定 socket timeout 即可 07/08 17:27
5F:→ dou0228: 但送的时间要比 socket timeout 早 07/08 17:28