当前位置:  开发笔记 > 编程语言 > 正文

如何在Erlang中发送多播消息并重用端口?

如何解决《如何在Erlang中发送多播消息并重用端口?》经验,为你挑选了0个好方法。

我的程序是我的第一个真正的Erlang程序,我已经有了一个良好的开端.我让它听取消息,阅读它们并解析它们.我也发送它们.困扰我的一件小事是我不能在5353号港口发送,我已经尝试了一切.我的机器上的所有其他应用程序都可以通过端口5353,SubEthaEdit,iTunes,iChat进行监听和发送.

解决方案必须在端口5353上广播发送,这就是原因.

"如果收到的多播DNS查询中的源UDP端口不是端口5353,则表示发起查询的客户端是一个不能完全实现所有多播DNS的简单客户端.在这种情况下,多播DNS响应者必须发送一个UDP响应通过单播直接返回到客户端查询数据包的源IP地址和端口.这种单播响应必须是传统的单播DNS服务器生成的传统单播响应;例如,它必须重复查询ID以及查询包中给出的问题."

它们都在发送多播消息时报告端口:5353.我真的希望我的应用程序玩得很好并做同样的事情,发送端口5353.这是我现在的模块.

-module(zeroconf).

-include("zeroconf.hrl").

-export([open/0,start/0]).
-export([stop/1,receiver/0]).
-export([send/1]).

-define(ADDR, {224,0,0,251}).
-define(PORT, 5353).

send(Domain) ->
    {ok,S} = gen_udp:open(0,[{broadcast,true}]), % I really want this Port to be 5353 :-(
    % this doesn't complain or throw errors but it also doesn't work :-(        
    %{ok,S} = gen_udp:open(?PORT,[{reuseaddr,true}, {ip,?ADDR}, {broadcast,true},multicast_ttl,4}, {multicast_loop,false}, binary]),
    P = #dns_rec{header=#dns_header{},qdlist=[#dns_query{domain=Domain,type=ptr,class=in}]},
    gen_udp:send(S,?ADDR,?PORT,inet_dns:encode(P)),
    gen_udp:close(S).

这是一些输出的样子.

这是来自SubEthaEdit的QUERY,在本地网络上查找其他实例,请注意它显示Port:5353

From: {192,168,0,105}
Port: 5353
Data: {ok,{dns_rec,{dns_header,0,true,'query',true,false,false,false,false,0},
                   [],
                   [{dns_rr,"_see._tcp.local",ptr,in,0,0,
                            "jhr@Blackintosh._see._tcp.local",undefined,[],
                            false}],
                   [],[]}}

现在这是我的模块中查询本地网络上的iTunes实例,注意它说Port:59795代码就像现在一样,该端口是随机的.我真的希望它是5353.

From: {192,168,0,105}
Port: 59795
Data: {ok,{dns_rec,{dns_header,0,false,'query',false,false,false,false,false,
                               0},
                   [{dns_query,"_daap._tcp.local",ptr,in}],
                   [],[],[]}}

有没有人对UDP多播有任何神秘的见解?更新所以我可以尝试接受答案.我想我不能这样做.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有