2010-11-25 76 views
5

我正在使用Java应用程序将UDP数据包发送到Android设备。在那里我有另一个接收这些UDP数据包并显示其数据的Java应用程序 - 非常简单。如何在Java中获取UDP数据包的TTL?

现在我正在研究一些路由算法 - 因此很高兴知道UDP数据包发送后有多少跳。我的想法是读出数据包的TTL(生存时间)值并显示它。你知道这是纯粹的Java可能吗?类DatagramPacket根本没有提供任何提示。

我想这是不可能的,因为这个信息可能已经被删除在较低层,但我只是想确定。 :-)

+0

[确定Java中多播数据包的剩余TTL]的可能重复(http://stackoverflow.com/questions/1723429/determine-the-remaining-ttl-of-a-multicast-packet-in-java ) – 2010-11-25 14:19:25

+0

(答案似乎是,在纯Java中不可能获得剩余的TTL,并且TTL仅在原始IP数据包级别才有意义。) – 2010-11-25 14:20:19

回答

2

TTL field是,如你所知,底层IP协议(使用时)没有的,UDP的一个特征。因此它在DatagramPacket API中不可见是有道理的。不过,我认为你是对的。通常不可能通过数据报级API访问IP数据包:您可能需要查看数据包捕获。

1

这是IP头的一部分,并从套接字设置,显然只适用于组播套接字。检查这个答案:

Java control IP TTL?

+0

您可以使用MulticastSocket而不是DatagramSocket进行单播但是你仍然无法从中获取数据包的TTL。 getTimeToLive()方法仅返回用于* sending *的默认TTL。 – EJP 2010-11-25 23:16:38