为啥 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,为啥它受到保护?