Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Google计算引擎上接收UDP数据包_Java_Networking_Udp_Port_Google Compute Engine - Fatal编程技术网

Java 在Google计算引擎上接收UDP数据包

Java 在Google计算引擎上接收UDP数据包,java,networking,udp,port,google-compute-engine,Java,Networking,Udp,Port,Google Compute Engine,我的任务是在谷歌计算引擎上接收UDP数据包。给定的端口是300,我已经有了一个简单的Java程序,可以处理这些UDP数据包 现在是我的问题。获取UDP数据包到我的Java程序 为此我不知道该怎么做。 到目前为止,我尝试的是让Java程序直接监听端口,但没有成功。我怀疑来自GCE外部的流量必须路由到内部?首先确保在GCE VM实例的网络上添加了防火墙规则,该规则允许端口300上UDP协议的传入流量。 您可以通过转到开发者控制台,选择您的项目,然后计算->计算引擎->网络,单击正确的网络并验证防火墙

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

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

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

首先确保在GCE VM实例的网络上添加了防火墙规则,该规则允许端口300上UDP协议的传入流量。 您可以通过转到开发者控制台,选择您的项目,然后计算->计算引擎->网络,单击正确的网络并验证防火墙规则(如果您使用了它们,还可以验证标记)。如果未添加规则,则为流量添加规则。

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

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


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


我的体系结构是使用一个GCE VM,一个C++应用程序接收UDP数据,然后使用LIbCURL,将数据转换为HTTP并将其发送到谷歌App Engine进行处理。要使UDP接收器具有可扩展性和容错性,请使用网络平衡和多个VM侦听UDP。

这是Windows还是Linux GCE实例?@Kamran这是一个带有Debian 7udp的Linux GCE,是一个协议,不保证包无论如何都会到达。因此,我不知道这是如何解决这个问题的:这只是udp的特性。显然,如果您将包发送到本地主机或通过以太网,则收到这些包的可能性更高。