【问题标题】:Sending packets via UDP in erlang在erlang中通过UDP发送数据包
【发布时间】:2011-08-20 17:25:36
【问题描述】:

所以我正在尝试将 udp 数据包发送到计算机上的侦听端口,该端口未连接到同一 LAN,但通过 erlang 中的 gen_udp 可以访问互联网。

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

【问题讨论】:

  • 你的接收节点也是erlang节点吗?
  • 我建议使用Wireshark 或类似的工具来查看数据包是否离开发送计算机并到达目标计算机。
  • 感谢 Adam 的提示 :) ,是的,我注意到我的路由器出了问题,因为我将路由器本地 IP 地址(我获得与我的路由器关联的 IP 地址)作为我在 wireshark 上的来源,我尝试断开它,然后将我的以太网电缆直接从我的宽带插入我的计算机,它可以工作,我可以进一步研究它。

标签: networking erlang erlang-ports


【解决方案1】:

您是否尝试通过以下方式将 Socket 的控制进程设置为当前进程: gen_udp:controlling_process(Socket,Pid)?

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

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

【讨论】:

  • 感谢回复,controlling_process 对我不起作用,我不知道是什么导致了问题,因为进程应该监听那个端口,我也试过 inet:i()看到它的设置和状态是绑定的。
  • @Krewie: 那么 gen_udp:recv 需要什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多