2009-06-05 91 views
1

我的Java應用程序通過UDP接收數據。它使用數據進行在線數據挖掘任務。這意味着接收每個數據包並不重要,這首先使得UDP的選擇合理。此外,數據通過LAN傳輸,因此物理網絡應該合理可靠。無論如何,我無法控制協議的選擇或所包含的數據。在Windows Server,Java中監視UDP數據包丟失

不過,我擔心可能由於應用程序本身的過載和處理時間過長而導致丟包。我想知道這些事情發生的頻率以及丟失了多少數據。

理想情況下,我正在尋找一種方法來監控生產系統中的丟包情況。但部分解決方案也是受歡迎的。

我意識到不可能總是知道UDP數據包丟失(不控制數據包內容)。我正在考慮沿着操作系統接收到的數據包的行,但從來沒有到達應用程序;也可能是應用程序內部的一些聰明的解決方案,例如快速閱讀線程,在客戶端忙時丟棄數據。

我們在Windows Server 2003或2008

回答

2

的問題是,有沒有辦法告訴你,如果是依靠UDP格式,你已經失去了任何數據包進行部署。

如果您需要知道這種類型的信息,您需要將其構建爲您在UDP層上的格式(如TCP序列號)。如果你這樣做,而且格式很簡單,那麼你可以很容易地在微軟的NetMon或WireShark中創建過濾器來記錄和跟蹤這些信息。

另請注意,TCP序列號的實現還有助於檢測使用UDP時可能發生的亂序數據包。

+0

我意識到不可能總是知道丟包,但我正在尋找一種方法來知道至少* something *。我編輯了這個問題來反映這一點。 – daphshez 2009-06-05 13:21:16

+0

因爲你的問題沒有多大意義,因爲你幾乎不應該陷入你丟失了操作系統已經收到但沒有處理的數據包的情況。如果你處理的數據包速度很慢,但非常不可能,那麼它可能會*。網絡並不是那麼快。我也想不出任何方式來檢測由於應用程序緩慢而導致的數據包丟失。我想我的答案仍然是正確的方法來檢測數據包丟失,無論是通過網絡或緩慢的應用程序,因爲你不能分辨兩者之間的差異。 – 2009-06-05 16:04:24

0

如果您擔心數據包丟失,請使用TCP。

這就是爲什麼它被髮明的原因之一。