当我想异步接收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并且可以避免这种情况吗?
答案 0 :(得分:0)
没有不需要端点的重载,但这并不意味着您必须指定特定的端点。您可以指定任何IP地址作为remoteEP。
EndPoint remoteEP = (EndPoint)(new IPEndPoint(IPAddress.Any, 0));
EndReceiveFrom需要传递ref变量,该变量将由方法调用本身填充。您可以类似地实例化endPoint。
EndPoint receivedFromEP = new IPEndPoint(IPAddress.Any, 0);
调用完成后,如果不需要,只需忽略receiveFromEP的值。