【问题标题】:Get sender ip from multicast packet从多播数据包中获取发送者 ip
【发布时间】:2012-11-26 17:39:41
【问题描述】:

如何获取组播 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 FileNotFoundExcetion { }
  • @JonathonReinhart 你读过关于我说这不是我的代码的评论吗sigh
  • 我很抱歉错过了这一点。但是,我不会称之为“燃烧”,我会称之为“提出建设性建议”。
  • 我相信你应该使用 s.receiveFrom() 而不是 s.receive() (msdn.microsoft.com/en-us/library/…)

标签: c# network-programming multicast


【解决方案1】:

由于您使用的是 UDP,因此您无需与远程端点建立连接(与 TCP 不同,每个连接只有一个套接字)。因此,您必须在收到数据报时获取远程端点的地址。为此,请调用 receiveFrom 而不是 receive()

http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.receivefrom.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多