1

マルチキャストで送信された自分のパケットを受信できません。私は2つのUdpclientレシーバーがマルチキャストグループでパケットを受信し、送信者がパケットを送信するように作成しました。私のパケットはグループに送信されますが、私が送信したパケットを受信できません....

public void Join()
    {           
            IPAddress ip1 = IPAddress.Any;
            localep = new IPEndPoint(ip1, port);

            Receiver = new UdpClient();
            Receiver.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
            Receiver.Client.Bind(localep);

            Sender = new UdpClient();
            Sender.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
            Sender.Client.Bind(localep);

            IPAddress ip = IPAddress.Parse(IP);
            remoteep = new IPEndPoint(ip, port);


            Sender.JoinMulticastGroup(ip);
            Sender.EnableBroadcast = true;
            Sender.MulticastLoopback = true;

            Receiver.JoinMulticastGroup(ip);
            Receiver.EnableBroadcast = true;
            Receiver.MulticastLoopback = true;

            udpState.ipEndpt = RemoteIpEndPoint;
            udpState.udpClient = Receiver;

            Receiver.BeginReceive(new AsyncCallback(GetMsg), udpState);             

    }   



void GetMsg(IAsyncResult ar)
{


UdpClient udpClient = (UdpClient)((UdpState)(ar.AsyncState)).udpClient;
            IPEndPoint ipEndpt = (IPEndPoint)((UdpState)(ar.AsyncState)).ipEndpt;
            RecByte = Receiver.EndReceive(ar, ref ipEndpt);
}
//Sending packets logic

McastOTS.Sender.Send(sendBytes, sendBytes.Length, McastOTS.remoteep);
4

1 に答える 1

0

あなたがする必要があるのは、EndReceiveの後にもう一度BeginReceiveを呼び出すことだけです。そうしないと、メッセージが 1 つしか届かず、他のメッセージは表示されません...

void GetMsg(IAsyncResult ar)
{
   UdpClient udpClient = (UdpClient)((UdpState)(ar.AsyncState)).udpClient;
   IPEndPoint ipEndpt = (IPEndPoint)((UdpState)(ar.AsyncState)).ipEndpt;
   RecByte = Receiver.EndReceive(ar, ref ipEndpt);
   Receiver.BeginReceive(GetMsg, udpState);
}
于 2013-01-02T20:43:34.583 に答える