我的目标是发送一个带有空数据字段的TCP数据包,以便用远程机器测试套接字。
我正在使用OutputStream类的write(byte [] b)方法。 我的尝试:
outClient = ClientSocket.getOutputStream();
outClient.write(("").getBytes());
这样做,数据包永远不会显示在线路上。如果""它可以正常工作被"取代"或任何非零字符串。
我尝试了jpcap,它与我合作,但没有达到我的目标。 我想扩展OutputStream类,并实现我自己的OutputStream.write方法。但这超出了我的意识。如果有人做过这样的话,请给我建议。
答案 0 :(得分:3)
如果您只想快速检测静默删除的连接,可以使用Socket.setKeepAlive( true )
。此方法要求TCP / IP在没有任何数据包或应用程序编程的情况下处理心跳探测。但是,如果您想要更多地控制心跳的频率,则应该使用应用程序级别的数据包实现心跳。
答案 1 :(得分:-2)
没有空的TCP数据包,因为没有TCP数据包。 TCP是字节流协议。如果发送零字节,则不会发生任何事情。
要检测断开的连接,缺少keepalive,这只会在两小时后帮助您,您必须依赖读取超时并编写例外。