2013-07-17 69 views
2

Erlang 16的默认UDP监听行为是否发生了变化?我写了下面的代码,通过UDP发送的温度和湿度每2秒:Erlang 16B01不再接收来自arduino的udp消息

unsigned int sendPort = 8888; 
IPAddress sendIp(10, 0, 1, 16); 

Udp.beginPacket(sendIp, sendPort); 
Udp.write(ReplyBuffer, 8); 
Udp.endPacket(); 

二郎R15在Mac上似乎接收数据包罚款:

Erlang R15B03 (erts-5.9.3.1) [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false] [dtrace] 

Eshell V5.9.3.1 (abort with ^G) 
1> {ok,S}=gen_udp:open(8888,[]). 
{ok,#Port<0.581>} 
2> flush(). 
Shell got {udp,#Port<0.581>,{10,0,1,26},8888,[0,0,0,220,0,0,2,179]} 
Shell got {udp,#Port<0.581>,{10,0,1,26},8888,[0,0,0,220,0,0,2,179]} 
ok 

但在二郎R16B01在Mac上它没有收到任何东西:

Erlang R16B01 (erts-5.10.2) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace] 

Eshell V5.10.2 (abort with ^G) 
1> {ok,S}=gen_udp:open(8888,[]). 
{ok,#Port<0.580>} 
2> flush(). 
ok 

一个简单的python脚本也接收UDP消息。

+0

测试没有连接选项,“{ok,S} = gen_udp:open(8888,[])。”和R16B01的开始? – 0xAX

+0

而且你会发送到'10,0,16,16',但你没有在'udp'监听器中指定ip,我认为你必须发送到'127.0.0.1',这里有默认监听器。 – 0xAX

+0

我使用R15和R16中的相同选项进行了测试。我不认为我可以设置要听的地址。我做了另一次尝试来详细说明所有我可以用'gen_udp:open(8888,[inet,binary,{recbuf,100},{read_packets,1},{ifaddr,{10,0,1,16}},{ ip,{10,0,1,16}},{multicast_loop,true},{active,true},{add_membership,{{10,0,1,26},{10,0,1,16}}} ,{deliver,term},{dontroute,true},{header,0},{mode,binary},{read_packets,1}])'但是得到了相同的结果。 – HawaiianSpork

回答

0

我是个白痴。这是mac防火墙。防火墙首选项设置为阻止一个erlang版本的传入流量,但不阻止其他流量。