3
public void send_multicast(string message)
    {
        UdpClient c = new UdpClient(10102);
        Byte[] sendBytes = Encoding.ASCII.GetBytes(message); 
        IPAddress m_GrpAddr = IPAddress.Parse("224.0.0.1");
        IPEndPoint ep = new IPEndPoint(m_GrpAddr,10102);   
        c.MulticastLoopback=true;
         c.JoinMulticastGroup(m_GrpAddr);
        c.Send(sendBytes,sendBytes.Length,ep);
        Console.WriteLine(message);
    }

    public string recv_multicast()
    {
        Console.WriteLine("was here");
        String strData = "";
        //String Ret = "";
        ASCIIEncoding ASCII = new ASCIIEncoding();
        UdpClient c = new UdpClient(10101);

        // Establish the communication endpoint.
        IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 10101);
         IPAddress m_GrpAddr = IPAddress.Parse("224.0.0.1");

         c.JoinMulticastGroup(m_GrpAddr);
            Byte[] data = c.Receive(ref endpoint);
            strData = ASCII.GetString(data);
            //Ret += strData + "\n";

        return strData;
    }

ポートに何か問題がありますか?

recvメソッドがブロックされていますが、メッセージを受信して​​いませんか?

wiresharkでは、ローカルアドレスポート10102から224.0.0.1 dest_port 0に送信されるメッセージを確認できますが、recvはマルチキャストアドレスからメッセージを取得していません。

ところで、私は同じコンピューターで両方のインスタンスを実行しています。参照: http: //msdn.microsoft.com/en-us/library/ekd1t784.aspx

**解決策を得ました:送信ルーチンで

IPEndPoint ep = new IPEndPoint(m_GrpAddr,10102); 

する必要があります

IPEndPoint ep = new IPEndPoint(m_GrpAddr,10101);

受信ポート**

4

1 に答える 1

1

自分で送信したパケットを受信するには、マルチキャストループバックを有効にする必要があります。

http://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.multicastloopback.aspx

クライアント側だけでなくサーバー側でもJoinMulticastGroupを使用する必要があります。それが失敗した場合は、Wireshark(google it)を使用して、パケットが実際に送信されているかどうかを確認することもできます。

于 2011-10-20T08:08:04.800 に答える