2011-05-07 71 views
0

所以我试图发送udp数据包到一个计算机上的一个监听端口,它没有连接到同一个局域网,但通过erlang中的gen_udp访问互联网。发送数据包通过在erlang的UDP

我打开的端口 ({ok, Socket} = gen_udp:open(8887).),另一个节点以同样的方式在打开的端口,当我通过gen_udp:send我没有收到任何东西(从一个节点发送一个数据包到另一个开始我的第一个节点在接收节点上尝试flush()),所以我想知道是否有什么我做错了? ,我检查了防火墙,并允许erlang和epmd。

+0

是你的接收节点还一个erlang节点? – 2011-05-07 14:15:42

+2

我建议使用[Wireshark](http://www.wireshark.org/)或类似的工具来查看数据包是否离开发送计算机并到达目标计算机。 – 2011-05-08 11:49:46

+1

thx的提示亚当:),是的,我注意到我的路由器背后的麻烦,因为我得到的路由器本地IP地址(我得到一个IP地址与我的路由器相关)作为我的源wireshark,我试图断开它,只是把我的宽带直接从我的宽带插头连接到我的电脑上,然后工作,我可以更深入地研究它。 – Krewie 2011-05-08 13:39:17

回答

0

是否尝试通过设置当前进程的Socket控制进程: gen_udp:controlling_process(Socket,Pid)

然后,您应该设置一个接收循环,并将消息发送给您。消息的格式应为:{udp, Socket, IP, InPortNo, Packet}

您也可以尝试在打开它之后使用inet:setopts(Socket, [{active, false}])将套接字设置为被动模式。之后,您可以使用'gen_udp:recv/3`从套接字读取。

+0

thx作为答复,controls_process没有为我工作,我无法弄清楚什么导致麻烦,因为进程应该听该端口,我也试过inet:我()看到它的设置和状态受到约束。 – Krewie 2011-05-07 17:05:51

+0

@Krewie:gen_udp需要什么:recv呢? – AJed 2012-04-25 03:01:48