从多播数据包中获取发送者IP

6

如何获取多播UDP数据包发送者的IP地址?当前代码采用同步/阻塞方式设置(见下面的注释)。以下是代码:

    private void receive()
    {
        string mcastGroup = SetMcastGroup();
        s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        s.EnableBroadcast = true;
        IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 5000);
        s.Bind(ipep);
        IPAddress ip = IPAddress.Parse(mcastGroup);
        s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, IPAddress.Any));

        while (true)
        {
            try
            {
                byte[] b = new byte[4096];
                s.Receive(b);
                string str = Encoding.ASCII.GetString(b, 0, b.Length);
                //this.SetText(ipep.Address + ": " + str.Trim());
                this.SetText(senderIP() + ": " + str.Trim());
            }
            catch{}
        }
    }

注意:这个问题来自聊天,因此不是我的代码。我只是问这个问题是因为我理解了这个问题。


请不要使用空的 catch { }。这只会掩盖错误,使问题更难以识别。如果您尝试忽略特定的异常,请针对该特定类型进行处理(例如 catch FileNotFoundException { })。 - Jonathon Reinhart
2
@JonathonReinhart 你看到我说这不是我的代码的评论了吗 叹气 - Stuart Blackler
5
抱歉没有注意到。然而,我不会称其为“炮轰”,我会称之为“提出建设性建议”。 - Jonathon Reinhart
我认为你应该使用s.receiveFrom()而不是s.receive() (http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.receivemessagefrom.aspx)。 - Gille
1个回答

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接