【问题标题】:Receive UDP Packets on Google Compute Engine在 Google Compute Engine 上接收 UDP 数据包
【发布时间】:2015-08-09 17:39:38
【问题描述】:

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

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

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

【问题讨论】:

  • 这是 Windows 还是 Linux GCE 实例?
  • @Kamran 这是一个带有 Debian 7 的 Linux GCE

标签: java networking udp port google-compute-engine


【解决方案1】:

首先确保您已在 GCE 虚拟机实例的网络上添加防火墙规则,该规则允许 UDP 协议在端口 300 上的传入流量。 您可以通过转到 Developers Console,选择您的项目,然后 Compute-> Compute Engine-> Networks,单击正确的网络并验证防火墙规则(以及标签,如果您使用它们)来执行此操作。如果未添加规则,则为流量添加规则。

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

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

1. Listing Google Compute Engine firewall rules

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • udp 是一种协议,无法保证包裹无论如何都会到达。因此我不知道这是如何解决问题的:这只是udp的特性。显然,如果您将包发送到 localhost 或通过以太网,您收到这些包的机会就会更高。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 2018-04-28
    • 2023-03-23
    • 1970-01-01
    • 2010-12-09
    • 2014-01-23
    相关资源
    最近更新 更多