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{}
        }
    }

注:この質問はチャットからのもので、私のコードではありません。私は問題を理解しているので質問しているだけです。

4

1 に答える 1

3

UDP を使用しているため、リモート エンドポイントとの接続を確立しません (接続ごとに 1 つのソケットを持つ TCP とは異なります)。したがって、データグラムを受信したら、リモート エンドポイントのアドレスを取得する必要があります。receiveFrom代わりにこの呼び出しを行うにはreceive()

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

于 2012-11-26T06:55:07.563 に答える