다음과 같은 간단한 배열로 인해 무엇이 잘못 되었습니까? 내가하고있는 일은 메시지를 멀티 캐스트하는 UDP 광고주와이 메시지를 받기 위해 멀티 캐스트 그룹에 조인하는 수신기를 만드는 것입니다. 둘 다 동일한 컴퓨터에서 실행됩니다.소켓을 통한 광고/청취가 가장 간편합니다.
string Port = "54153";
HostName Host = new HostName("224.3.0.5"); //a multicast range address
//listener
var L = new DatagramSocket();
L.MessageReceived += (sender2, args) => { /*something*/ };
await L.BindServiceNameAsync(Port);
L.JoinMulticastGroup(Host);
//advertiser
var AdvertiserSocket = new DatagramSocket();
AdvertiserSocket.Control.MulticastOnly = true;
Stream outStream = (await AdvertiserSocket.GetOutputStreamAsync(Host, Port)).AsStreamForWrite();
using (var writer = new StreamWriter(outStream))
{
await writer.WriteLineAsync("MESSAGE");
await writer.FlushAsync();
}
리스너는 모든 (호출되지 않습니다 MessageReceived
)에서 아무것도받지 않습니다. 성공하지 못한 다음 변형을 시도했습니다.
- 광고주에서 BindServiceNameAsync()를 호출하고 호출하지 않습니다.
- 광고주, 수신기 또는 둘 모두에서
MulticastOnly
사용 - 하나의 개체를 다른 개체보다 먼저 만든 후 잠시 기다리십시오.
255.255.255.255
을 호스트로 사용합니다. 광고주가 (TCPView가 패킷을 전송 방송) 제대로 데이터를 멀티 캐스팅되지만 수신 포트가 아무것도 못하고처럼
[이 비슷한 케이스] (http://stackoverflow.com/questions/38679646/uwp-datagramsocket-multicast/38739116#38739116)가 도움이되는지 확인하십시오. –
@ ElvisXia-MSFT : 감사합니다. Elvis. 제공 한 링크는 샘플 중 하나를 사용합니다 (UWP API 샘플의 시나리오 5). 이것이 바로 내가 시작한 것입니다. 이 샘플의 문제점은 단일 DatagramSocket을 사용하고 동일한 소켓에서 광고하고 청취한다는 것입니다. 필자의 경우, 동일한 머신에서 두 개의 DatagramSocket 객체가 실행된다. 그 중 하나는 멀티 캐스팅하는 광고주이고 다른 하나는 멀티 캐스트 데이터를 수신 대기하는 수신기입니다. 이 특정 시나리오에서 리스너는 아무 것도 수신하지 않습니다. – dotNET
@ ElvisXia-MSFT : 위의 코드를 빈 UWP 응용 프로그램에 복사하여 붙여 넣기 만하면됩니다. 내가 말하는 행동을 보게 될거야. – dotNET