2012-04-27 4 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

Кажется мне все, что вам нужно сделать, это снова позвонить BeginReceive после EndReceive. В противном случае вы получите только 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); 
} 
Смежные вопросы