Использование C # UDP Client - PullRequest
       8

Использование C # UDP Client

1 голос
/ 19 января 2012

Я делаю программу, которая должна постоянно прослушивать данные UDP.

Моя текущая идея состоит в том, чтобы этот метод работал постоянно в одном потоке, прослушивая пакеты и затем добавляя их в список, готовый для обработки в других потоках. Основная проблема заключается в том, что я также хотел бы добавить полученный IP-адрес в список, чтобы другой поток мог с ним справиться, но я не знаю, прекратит ли программа на мгновение использование метода Receive, если она потеряет пакеты, полученные во время обработки данные или, если он все еще может получить их из очереди.

public void listen()
{
    try
    {
        packetQueue.Add(receivingUdpClient.Receive(ref RemoteIpEndPoint)); 
    }
    catch (Exception e)
    {
        Console.WriteLine(e.ToString());
    }
}

Ответы [ 2 ]

1 голос
/ 19 января 2012

сетевой трафик должен буферизироваться на вашей сетевой карте, поэтому данные должны быть согласованными, даже если вы слушаете непоследовательно.Что касается IP-адреса, вы можете получить его от конечной точки, поэтому вам нужно будет также передать его:

public void listen()
  {
      try
      {
          packetQueue.Add(receivingUdpClient.Receive(ref RemoteIpEndPoint), RemoteIpEndPoint);
       }
      catch (Exception e)
      {
          Console.WriteLine(e.ToString());
      }
  }

Если вы хотите пропустить как можно меньше промежутков между приемами, я предлагаю использоватьначать новый BeginReceive в обратном вызове перед обработкой полученных данных в обратном вызове.это добавит некоторую сложность синхронизации.

1 голос
/ 19 января 2012

Я не знаю способа получить IP из пакета Udp.Вам нужно получить его из EndPoint:

 byte[] receivedBytes = oClientListener.Receive(ref endPoint);
 IPAddress = endPoint.Address;
 PackQueue.Add( new PacketOfSomeType( receivedBytes, IPAdress ) );

Кроме того, ваша программа должна будет ОЧЕНЬ медленно запускаться, чтобы начать терять любые пакеты - окна будут буферизовать их для вас, если у вас установлен клиентский слушательдо!

...