2010-11-25 36 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