UPnPマルチキャスト(Windows 7 Professional 64 Bitで動作するVisual C#2010 Express)をテストするための小さなプログラムを作成しました。私のネットワーク上のUPnPデバイスからUPnP NOTIFYメッセージを受け取ることができます。しかし、私がM-SEARCHメッセージを送るとき、私は答えを得ません。UPnPマルチキャスト:M-SEARCH(ディスカバリー)の回答がありません
私はiOS環境(MacのiPhoneシミュレータで動作するiOS用Monotouch)で同じコードをテストしました。そこでは正常に動作し、私はUPnPデバイスからすべての検索応答を取得します。私はまた、私のWindowsプログラムからM-SEARCHメッセージを見ることができます。
Windows(またはFirewall?)が検索応答を隠しているようです。何か案が?ここで
コードです:
IPEndPoint LocalEndPoint = new IPEndPoint(IPAddress.Any, 1900);
IPEndPoint MulticastEndPoint = new IPEndPoint(IPAddress.Parse("239.255.255.250"), 1900);
Socket UdpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
UdpSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
UdpSocket.Bind(LocalEndPoint);
UdpSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(MulticastEndPoint.Address, IPAddress.Any));
UdpSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 2);
UdpSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastLoopback, true);
Console.WriteLine("UDP-Socket setup done...\r\n");
string SearchString = "M-SEARCH * HTTP/1.1\r\nHOST:239.255.255.250:1900\r\nMAN:\"ssdp:discover\"\r\nST:ssdp:all\r\nMX:3\r\n\r\n";
UdpSocket.SendTo(Encoding.UTF8.GetBytes(SearchString), SocketFlags.None, MulticastEndPoint);
Console.WriteLine("M-Search sent...\r\n");
byte[] ReceiveBuffer = new byte[64000];
int ReceivedBytes = 0;
while (true)
{
if (UdpSocket.Available > 0)
{
ReceivedBytes = UdpSocket.Receive(ReceiveBuffer, SocketFlags.None);
if (ReceivedBytes > 0)
{
Console.WriteLine(Encoding.UTF8.GetString(ReceiveBuffer, 0, ReceivedBytes));
}
}
}
MulticastEndPointは何に設定されていますか? – simonc
iOSで表示されるM-SEARCHは、Windowsプログラムのものですか?あなたのWindowsボックスで別のUPnP発見ツールを試しましたか? –
@PavelZdenek:はい私は確信しています。私はM-SEARCHメッセージにいくつかの余分な文字を添付して、iOS上のメッセージを認識することができました。 –