C# 获取异步接收的远程端点
当我想异步接收UDP数据报时,我会编写一个调用BeginReceiveFrom,该调用来自System.Net.Sockets.Socket类。BeginReceiveFrom方法需要一个端点作为remoteEP参数C# 获取异步接收的远程端点,c#,network-programming,C#,Network Programming,当我想异步接收UDP数据报时,我会编写一个调用BeginReceiveFrom,该调用来自System.Net.Sockets.Socket类。BeginReceiveFrom方法需要一个端点作为remoteEP参数 public IAsyncResult BeginReceiveFrom ( byte[] buffer, int offset, int size, SocketFlags socketFlags, ref EndPoint remoteEP, Async
public IAsyncResult BeginReceiveFrom (
byte[] buffer,
int offset,
int size,
SocketFlags socketFlags,
ref EndPoint remoteEP,
AsyncCallback callback,
Object state
)
public int EndReceiveFrom (
IAsyncResult asyncResult,
ref EndPoint endPoint
)
此方法启动异步接收,无法在remoteEP中返回任何结果,因为它会立即返回。此参数是用于某种过滤,还是在接收完成时修改
在接收处理程序中,我调用EndReceiveFrom,其中我还必须将对Enpoint对象的引用作为端点参数传递
public IAsyncResult BeginReceiveFrom (
byte[] buffer,
int offset,
int size,
SocketFlags socketFlags,
ref EndPoint remoteEP,
AsyncCallback callback,
Object state
)
public int EndReceiveFrom (
IAsyncResult asyncResult,
ref EndPoint endPoint
)
EndReceiveFrom使用此端点对象指示UDP帧的发送方。为什么我必须将remoteEP传递给BeginReceiveFrom,我可以避免吗?没有不需要端点的重载,但这并不意味着您必须指定特定的端点。您可以将任何ip地址指定为remoteEP
EndPoint remoteEP = (EndPoint)(new IPEndPoint(IPAddress.Any, 0));
EndReceiveFrom需要一个pass by ref变量,该变量将由方法调用本身填充。您可以类似地实例化端点
EndPoint receivedFromEP = new IPEndPoint(IPAddress.Any, 0);
调用后,如果不需要ReceivedFromp的值,只需忽略它。没有不需要端点的重载,但这并不意味着您必须指定特定的端点。您可以将任何ip地址指定为remoteEP
EndPoint remoteEP = (EndPoint)(new IPEndPoint(IPAddress.Any, 0));
EndReceiveFrom需要一个pass by ref变量,该变量将由方法调用本身填充。您可以类似地实例化端点
EndPoint receivedFromEP = new IPEndPoint(IPAddress.Any, 0);
调用后,如果不需要ReceivedFromp的值,只需忽略它。那么BeginReceiveFrom中的remoteEP参数是什么?为什么我要创建一个被忽略的IPEndPoint?我没有任何文档可以为您的问题提供明确的答案,也许其他人有。我的猜测是,它与绑定到网络接口、安全性和约定有关。通常应用程序双向发送数据,因此了解数据来自何处是有意义的。您可能也会有多个客户端,因此可能需要对数据进行分离,甚至对数据包进行排序(TCP功能的子集)。我认为不需要任何客户信息更是规则的例外。因此,默认情况下填充端点是有意义的。那么BeginReceiveFrom中的remoteEP参数是什么?为什么我要创建一个被忽略的IPEndPoint?我没有任何文档可以为您的问题提供明确的答案,也许其他人有。我的猜测是,它与绑定到网络接口、安全性和约定有关。通常应用程序双向发送数据,因此了解数据来自何处是有意义的。您可能也会有多个客户端,因此可能需要对数据进行分离,甚至对数据包进行排序(TCP功能的子集)。我认为不需要任何客户信息更是规则的例外。因此,默认情况下填充端点是有意义的。