Почему SocketAsyncEventArgs.RemoteEndpoint возвращает ноль?C # - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь создать сервер udp, который получает данные от многих клиентов.Когда я пытаюсь получить удаленную конечную точку клиента после получения данных на сервере из свойства SocketAsyncEventArgs.RemoteEndpoint ... он возвращает значение NULL.Но все сообщения переданы правильно.Я проверяю это на своем локальном компьютере.

Вот мой код на стороне сервера:

   static Socket FlashUDP = new Socket(AddressFamily.InterNetworkV6,


SocketType.Dgram, ProtocolType.Udp);
        static IPEndPoint rec_ipep = new IPEndPoint(IPAddress.Parse("fe80:0:0:0:e8dd:
c141:d9ab:80f3%12"), 14086);
        static SocketAsyncEventArgs Sock_Args = new SocketAsyncEventArgs();
        static byte[] dataHolder = new byte[8];

static void Main2(string[] args)
{
    Sock_Args.Completed += Sock_Args_Completed;
    Sock_Args.SetBuffer(dataHolder, 0, 4);
    FlashUDP.Bind(rec_ipep as EndPoint);
    Console.WriteLine("Reciving.. v2");
    FlashUDP.ReceiveAsync(Sock_Args);
}

private static void Sock_Args_Completed(object sender, SocketAsyncEventArgs e)
{
    if(e.RemoteEndPoint == null)
    {
        Console.WriteLine("Remote end point is null");
    }
}
/* Output: 
  Reciving.. v2
  Remote end point is null*/

Это ошибка или есть другие способы сделать то же самое?Спасибо!

1 Ответ

0 голосов
/ 31 декабря 2018

Ответ был прост:

Я не знаю, что такое ошибка, используя ReciveAsync(); Но если мы установим socketAsyncEventArgs.RemoteEndpoint = new Ipendpoint(Ipaddress.Any, 0);, а затем вызовем RecieveFromAsync(socketAsyncEventArgs);

сейчас, когда мы печатаем

e.RemoteEndPoint() в функции обратного вызова Receive она дает удаленную конечную точку.

...