代码之家  ›  专栏  ›  技术社区  ›  harper

正在获取异步接收的远程终结点

  •  1
  • harper  · 技术社区  · 14 年前

    当我想异步接收UDP数据报时,我写的调用BeginReceiveFrom是 system.net.sockets.socket(系统.net.sockets.socket) 班级。BeginReceiveFrom方法需要一个终结点作为 遥控器 参数。

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

    此方法启动异步接收,并且无法在Remoteep中返回任何结果,因为它会立即返回。此参数是用于某种筛选,还是在接收完成时进行修改?

    在接收处理程序中,我调用EndReceiveFrom,在这里我还必须将对Enpoint对象的引用作为 端点 参数。

    public int EndReceiveFrom (
      IAsyncResult asyncResult,
      ref EndPoint endPoint
    )
    

    endReceiveFrom用此端点对象指示UDP帧的发送方。为什么我必须把遥控器传给接收者,我能避免这种情况吗?

    1 回复  |  直到 14 年前
        1
  •  0
  •   P.Brian.Mackey    14 年前

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

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

    EndReceiveFrom需要一个pass-by引用变量,该变量将由方法调用本身填充。您可以类似地实例化端点。

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

    在调用之后,如果不需要receivedfromep的值,只需忽略它。