为什么SocketAsyncEventArgs.RemoteEndpoint返回null? C#

时间:2018-12-31 15:54:16

标签: c# sockets asynchronous udp socketasynceventargs

我正在尝试创建一个从许多客户端接收数据的udp服务器。 当我尝试从SocketAsyncEventArgs.RemoteEndpoint属性接收服务器中的数据后获取客户端的远程端点时,它将重新运行为null。 但是,所有邮件均已正确传输。我正在我的本地PC上对此进行测试。

这是我的服务器端代码:

   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 :(得分:0)

答案很简单

我不知道使用什么错误 ReciveAsync(); 但是如果我们设定 socketAsyncEventArgs.RemoteEndpoint = new Ipendpoint(Ipaddress.Any, 0); 然后打电话 RecieveFromAsync(socketAsyncEventArgs);

现在我们何时打印

e.RemoteEndPoint()在接收回调函数中,它提供了远程端点。