2010-09-30 74 views
1

我正在處理髮送UDP數據包以啓動處理並需要在3-5分鐘後在同一個套接字上發回響應的應用程序,但問題是當響應被髮回時,它永遠不會到達客戶。 我正在使用java。任何建議,我們如何保持套接字在更長的時間內活着?UDP響應未到達客戶端

-

+0

確保您的端口正在偵聽,沒有防火牆或任何防病毒限制。 – 2010-09-30 07:52:12

+0

有沒有辦法在Linux(Fedora)中設置UDP超時設置? – sachin 2010-09-30 11:19:44

+0

'它永遠不會到達客戶'並​​不意味着'套接字[不活]'。 – EJP 2018-01-22 20:13:08

回答

1

任何建議,我們如何能夠保持插座活着在一段較長的時間?

有沒有一種方法來設置UDP超時設置...?

UDP是無連接的。如果應用程序綁定到UDP服務器套接字並偵聽,它可以等待消息無限地到達。

另一方面是沒有辦法在協議/套接字級別檢測到丟失的UDP消息。如果一臺機器發送UDP消息給另一臺機器,第一臺機器沒有直接的方式知道消息是否已經到達?沒有傳輸級超時來告訴發送者重傳。

如果您需要可靠性,超時,自動重傳等,您最好使用基於連接的傳輸協議,如TCP。

問題由同事的建議,可能是因爲防火牆關閉UDP連接,如果有一個特定的時間內沒有活動,溝通是可靠的一個需要實現超時探測。

從表面上看,這種解釋是荒謬的。 UDP是無連接的,所以沒有連接關閉或保持活動狀態。

真正的解釋可能是下列之一:被封鎖的防火牆軟件在一個或其它的機器,或某個網絡中

  • 的UDP請求或UDP的答覆。

  • 消息被髮送或接收的方式有些不對。

  • 您試圖通過NAT網關發送UDP消息;例如到其IP地址無法路由到另一臺的機器。需要採取特殊措施(例如UDP hole punching)將UDP流量傳輸到NATed主機,並且可能需要發送保持活動數據包以防止「UDP空洞」超時。

如果您嘗試通過來自Java的NAT防火牆發送UDP,那麼可以使用各種(第三方)Java庫來執行此操作。搜索「眩暈」和「轉」或「冰」一起的「Java」和「UDP」,或讀一開始下列:

這些解決方案都需要你採取措施「刷新」NAT綁定以保持防火牆「洞」處於打開狀態。

+0

如同事建議的問題,可能是防火牆關閉了UDP連接,如果在一段時間內沒有活動,通信是可靠的,需要實施超時探測。 – sachin 2010-10-06 16:39:05

+1

@sachin我認爲你的同事的意思是NAT /防火牆設備在一定時間後刪除出站數據包創建的自反規則,從而導致響應不被視爲響應。 – 2017-04-28 20:01:31

+0

@StephenC是的。這就是答覆如何通過。 – 2017-04-29 01:30:40