为啥 SocketAsyncEventArgs.RemoteEndpoint 返回 null? C#

Posted

技术标签:

【中文标题】为啥 SocketAsyncEventArgs.RemoteEndpoint 返回 null? C#【英文标题】:Why does SocketAsyncEventArgs.RemoteEndpoint returns null? c#为什么 SocketAsyncEventArgs.RemoteEndpoint 返回 null? C# 【发布时间】:2019-05-28 02:11:21 【问题描述】:

我正在尝试创建一个从许多客户端接收数据的 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】:

答案很简单,

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

现在我们打印

e.RemoteEndPoint() 在 Receive 回调函数中提供远程端点。

【讨论】:

以上是关于为啥 SocketAsyncEventArgs.RemoteEndpoint 返回 null? C#的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?