接收广播消息

时间:2010-03-27 17:25:23

标签: c# sockets

我正在尝试使用带有BRI接口的ISDN网络中的C#代码接收广播消息。

我看到使用Comm View工具在某些端口上发送到广播IP地址(239.255.255.255)的数据包。

但是当我尝试收听这个IP地址时,它说地址不在有效的上下文中。

但是当我在端口上向255.255.255.255发送广播消息时,我可以使用以下代码接收这些消息。

这个ip地址有什么问题 - 239.255.255.255?

The code I use to listen to broadcast messages is..

UdpClient udp = new UdpClient();
IPEndPoint receiveEndPoint = new IPEndPoint(IPAddress.Any, 8013);
// If I use IPAddress.Parse("239.255.255.255") to listen to,
// it says "the address is not in a valid // context."
udp.Client.Bind(receiveEndPoint);
udp.BeginReceive(_Callback, udp);

static private void _Callback(IAsyncResult iar)
{
        try
        {
            UdpClient client = (UdpClient)iar.AsyncState;

            client.BeginReceive(_Callback, client);

            IPEndPoint ipRemote = new IPEndPoint(IPAddress.Any, 8013);

            byte[] rgb = client.EndReceive(iar, ref ipRemote);

            Console.WriteLine("Received {0} bytes: \"{1}\"",
            rgb.Length.ToString(), Encoding.UTF8.GetString(rgb));
        }
        catch (ObjectDisposedException)
        {
            Console.WriteLine("closing listening socket");
        }
        catch (Exception exc)
        {
            Console.WriteLine("Listening socket error: \"" +
            exc.Message + "\"");
        }
 }

有一些数据包被发送到广播ipaddress(239.255.255.255),我可以在Commview工具中看到,但无法从代码中接收它们...

有人可以帮帮我吗?

提前感谢你,
Prasad Kancharla。

2 个答案:

答案 0 :(得分:0)

我在组播方面做得不多,但我相信准备接收组播数据包的过程分为两个步骤。首先,绑定到本地IP地址,这是您使用IPAddress.Any完成的操作。然后,您需要使用MulticastOption方法使用Socket.SetSocketOption对象指定要加入的多播组。

MSDN Library有一个example供您参考。

答案 1 :(得分:0)

听起来你假设地址是定向广播(子网本地广播),当它实际上是为多播保留的IP地址范围时,这完全不同。