我的任務是在Google Compute Engine上接收UDP數據包。鑑於端口,這是300,我已經有一個簡單的Java程序,可以處理這些UDP數據包。在Google Compute Engine上接收UDP數據包
我現在的問題。獲取UDP數據包到我的Java程序。
爲此我不知道該怎麼做。 我到目前爲止所嘗試的是讓Java程序直接監聽端口,但沒有工作。我懷疑GCE之外的交通必須路由到內部?
我的任務是在Google Compute Engine上接收UDP數據包。鑑於端口,這是300,我已經有一個簡單的Java程序,可以處理這些UDP數據包。在Google Compute Engine上接收UDP數據包
我現在的問題。獲取UDP數據包到我的Java程序。
爲此我不知道該怎麼做。 我到目前爲止所嘗試的是讓Java程序直接監聽端口,但沒有工作。我懷疑GCE之外的交通必須路由到內部?
首先確保您已在您的GCE VM實例的網絡上添加了防火牆規則,該規則允許端口300上UDP協議的傳入流量。 您可以轉到Developers Console,選擇您的項目,然後選擇Compute- >計算引擎 - >網絡,點擊正確的網絡並驗證防火牆規則(以及如果使用它們的標籤)。如果未添加規則,則爲流量添加規則。
「gcloud」是一個命令行工具,你可以用它來列出,並確認您的防火牆規則以及[1]:
$ gcloud計算防火牆規則列表
如果防火牆規則都不錯,然後使用像netcat這樣的簡單故障排除工具來測試流量是否被轉發到您的VM實例。
我建議不要使用Java來處理UDP。我經歷了莫名其妙的短時間內所有UDP流量到達丟失。這是垃圾收集造成的。
適用於我的體系結構是使用GCE VM與C++應用程序接收UDP數據,然後使用libCURL將數據轉換爲HTTP並將其分派到Google App Engine進行處理。爲了使UDP接收器具有可擴展性和容錯性,請使用網絡平衡和多個監聽UDP的虛擬機。
udp是一個協議,不保證軟件包將無論如何到達。因此我不知道這是如何解決問題的:這只是udp的特徵。很顯然,如果您將軟件包發送到本地主機或通過以太網,那麼您將收到這些軟件包的可能性會更高。 –
這是Windows或Linux GCE實例嗎? – Kamran
@Kamran這是一個Linux的GCE與Debian 7 – Denotier