2012-04-27 43 views
1

我无法收到我自己的数据包在多播上发送。我创建了两个Udpclient接收器,接收多播组上的数据包,发送者发送数据包。我的包被发送到组,但我不能接收回来的数据包通过我发送....我无法收到我自己的Mcast数据包C#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); 

回答

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); 
} 
相关问题