我的任务是在Google Compute Engine上接收UDP数据包。给定的是端口,它是300,我已经有一个简单的Java程序可以处理这些UDP数据包。
我现在的问题。获取UDP数据包到我的Java程序。
为此,我不知道该怎么做。 到目前为止我所尝试的是让Java程序直接听取端口,这不起作用。我怀疑来自GCE外部的流量必须路由到内部吗?
答案 0 :(得分:1)
首先确保您已在GCE VM实例的网络上添加了防火墙规则,该规则允许端口300上的UDP协议的传入流量。
您可以通过转到开发人员控制台,选择项目,然后计算 - >来完成此操作。计算引擎 - >网络,单击正确的网络并验证防火墙规则(如果您使用它们也会验证标签)。如果未添加规则,则为流量添加规则。
" gcloud"是一个命令行工具,您可以使用它来列出和验证您的防火墙规则[1]:
$ gcloud计算防火墙规则列表
如果防火墙规则良好,则使用netcat之类的简单故障排除工具来测试是否将流量转发到VM实例。
答案 1 :(得分:0)
我建议不要使用Java来处理UDP。我经历了无法解释的短暂时期,所有到达的UDP流量都丢失了。这是垃圾收集造成的。
对我有用的架构是使用GCE VM和C ++应用程序接收UDP数据,然后使用libCURL,将数据转换为HTTP并将其发送到Google App Engine进行处理。要使UDP接收器具有可扩展性和容错性,请使用网络平衡和多个侦听UDP的VM。