मुझे अपने कार्यक्रम, मेरी पहली असली Erlang कार्यक्रम पर एक अच्छी शुरुआत मिली है। मैंने इसे संदेशों के लिए सुनना, उन्हें पढ़ना और उन्हें पार्स करना है। मैं इसे भी भेज रहा हूं। एक छोटी सी चीज जो मुझे परेशान कर रही है वह है कि मैं पोर्ट 5353 पर नहीं भेज सकता, मैंने सब कुछ करने की कोशिश की है। मेरी मशीन पर अन्य सभी एप्लिकेशन पोर्ट 5353, सबइथाएडिट, आईट्यून्स, आईकैट पर सुन सकते हैं और भेज सकते हैं।मल्टीकास्ट संदेश कैसे भेजें और Erlang में एक बंदरगाह का पुन: उपयोग करें?
समाधान पोर्ट 5353 पर प्रसारण भेजना चाहिए और यही कारण है कि।
"एक प्राप्त मल्टीकास्ट DNS पूछताछ में स्रोत UDP पोर्ट बंदरगाह 5353 नहीं है तो इससे पता चलता है कि ग्राहक क्वेरी होने वाले एक सरल ग्राहक कि पूरी तरह से मल्टीकास्ट DNS के सभी। को लागू नहीं करता है इस में है मामले में, मल्टीकास्ट डीएनएस रेस्पॉन्डर को यूपीपी प्रतिक्रिया सीधे ग्राहक को यूनिकास्ट के माध्यम से, क्वेरी पैकेट के स्रोत आईपी पते और बंदरगाह पर भेजना होगा। यह यूनिकास्ट प्रतिक्रिया पारंपरिक यूनिकास्ट प्रतिक्रिया होना चाहिए जैसा पारंपरिक द्वारा उत्पन्न किया जाएगा यूनिकास्ट DNS सर्वर; उदाहरण के लिए, क्वेरी क्वेरी में दिए गए क्वेरी आईडी और प्रश्न को दोहराना होगा। "
वे सभी पोर्ट: 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 से एक प्रश्न स्थानीय नेटवर्क पर अन्य उदाहरण के लिए देख रहा है, नोटिस में यह कहा गया है कि पोर्ट: 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,
"[email protected]_see._tcp.local",undefined,[],
false}],
[],[]}}
अब यहाँ
मेरी मॉड्यूल से एक प्रश्न स्थानीय नेटवर्क पर iTunes के उदाहरण के लिए देख रहा है , नोटिस यह कहता है पोर्ट: 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}],
[],[],[]}}
किसी को भी सब पर यूडीपी बहुस्त्र्पीय करने में किसी भी रहस्यमय अंतर्दृष्टि है? अपडेट कर रहा है इसलिए मैं एक उत्तर को आजमा सकते हैं और स्वीकार कर सकता हूं। मुझे लगता है कि मैं बस ऐसा नहीं कर सकता।
मुझे ऐसा नहीं लगता क्योंकि मुझे भेजने के लिए {प्रसारण, सत्य} विकल्प पारित करने की आवश्यकता है। –
{प्रसारण, सत्य/गलत} को इनसेट के साथ बदलने के लिए संभव नहीं है: setopts/2 जब आप कोई संदेश भेज रहे हों तो? – emil
मैं इसे किसी भी सेट के साथ एक संदेश अवधि भेजने के लिए नहीं मिल सकता है या नहीं। –