获取异步接收的远程端点

时间:2010-06-22 15:27:49

标签: c# network-programming

当我想异步接收UDP数据报时,我编写了一个 System.Net.Sockets.Socket 类的调用BeginReceiveFrom。 BeginReceiveFrom方法需要将Endpoint作为 remoteEP 参数。

public IAsyncResult BeginReceiveFrom (
  byte[] buffer,
  int offset,
  int size,
  SocketFlags socketFlags,
  ref EndPoint remoteEP,
  AsyncCallback callback,
  Object state
)

此方法启动异步接收,并且不能在remoteEP中返回任何结果,因为它立即返回。此参数是用于某种过滤还是在接收完成后进行修改?

在接收处理程序中,我调用EndReceiveFrom,我还必须将对Enpoint对象的引用作为 endPoint 参数传递。

public int EndReceiveFrom (
  IAsyncResult asyncResult,
  ref EndPoint endPoint
)

EndReceiveFrom使用此Endpoint对象指示UDP帧的发送方。为什么我必须将remoteEP传递给BeginReceiveFrom并且可以避免这种情况吗?

1 个答案:

答案 0 :(得分:0)

没有不需要端点的重载,但这并不意味着您必须指定特定的端点。您可以指定任何IP地址作为remoteEP。

EndPoint remoteEP = (EndPoint)(new IPEndPoint(IPAddress.Any, 0));

EndReceiveFrom需要传递ref变量,该变量将由方法调用本身填充。您可以类似地实例化endPoint。

EndPoint receivedFromEP = new IPEndPoint(IPAddress.Any, 0);

调用完成后,如果不需要,只需忽略receiveFromEP的值。