使用Java发送零数据TCP / IP数据包

时间:2012-05-21 22:37:03

标签: sockets tcp java outputstream

我的目标是发送一个带有空数据字段的TCP数据包,以便用远程机器测试套接字。

我正在使用OutputStream类的write(byte [] b)方法。 我的尝试:

outClient = ClientSocket.getOutputStream();
outClient.write(("").getBytes());

这样做,数据包永远不会显示在线路上。如果""它可以正常工作被"取代"或任何非零字符串。

我尝试了jpcap,它与我合作,但没有达到我的目标。 我想扩展OutputStream类,并实现我自己的OutputStream.write方法。但这超出了我的意识。如果有人做过这样的话,请给我建议。

2 个答案:

答案 0 :(得分:3)

如果您只想快速检测静默删除的连接,可以使用Socket.setKeepAlive( true )。此方法要求TCP / IP在没有任何数据包或应用程序编程的情况下处理心跳探测。但是,如果您想要更多地控制心跳的频率,则应该使用应用程序级别的数据包实现心跳。

请点击此处了解详情:http://mindprod.com/jgloss/socket.html#DISCONNECT

答案 1 :(得分:-2)

没有空的TCP数据包,因为没有TCP数据包。 TCP是字节流协议。如果发送零字节,则不会发生任何事情。

要检测断开的连接,缺少keepalive,这只会在两小时后帮助您,您必须依赖读取超时并编写例外。