2011-05-07 70 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