在 Google Compute Engine 上接收 UDP 数据包

Receive UDP Packets on Google Compute Engine

我的任务是在 Google 计算引擎上接收 UDP 数据包。给出的端口是 300,我已经有一个简单的 Java 程序可以处理这些 UDP 数据包。

我现在的问题。将 UDP 数据包获取到我的 Java 程序。

为此我不知道该怎么做。 到目前为止我尝试过的是让 Java 程序直接监听端口,但没有用。我怀疑来自 GCE 外部的流量必须路由到内部?

首先确保您已在 GCE VM 实例的网络上添加防火墙规则,允许端口 300 上的 UDP 协议传入流量。 您可以转到开发人员控制台,select 您的项目,然后计算 -> 计算引擎 -> 网络,单击正确的网络并验证防火墙规则(以及标签,如果您使用它们)。如果没有添加规则,则为流量添加规则。

"gcloud" 是一个命令行工具,您也可以使用它来列出和验证您的防火墙规则 [1]:
$ gcloud compute 防火墙规则列表

如果防火墙规则良好,则使用 netcat 等简单的故障排除工具来测试流量是否正在转发到您的 VM 实例。

1. Listing Google Compute Engine firewall rules

我建议不要使用 Java 来处理 UDP。我经历了莫名其妙的短时间,所有到达的 UDP 流量都丢失了。这是由垃圾收集引起的。

适合我的架构是使用 GCE VM 和接收 UDP 数据的 C++ 应用程序,然后使用 libCURL,将数据转换为 HTTP 并将其分派到 Google App Engine 进行处理。要使 UDP 接收器具有可扩展性和容错性,请使用网络平衡和多个 VM 侦听 UDP。