如果我这样做:

byte[] buffer = new byte[1024];
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint remote = new IPEndPoint(IPAddress.Parse("12.34.56.78"), 1337);
sock.ReceiveFrom(buffer, ref remote);

ReceiveFrom方法是否只从正在传递的终结点接收数据包?文件规定如下:
对于无连接协议,receivefrom将读取第一个
将接收到的数据报排队放入本地网络缓冲区。
这是否意味着传递的端点仅用于存储数据包来自的主机的端点,并且根本不会影响receivefrom方法的行为?如果是,为什么需要将其传递为“ref”而不是“out”?

最佳答案

注意ReceiveFrom方法是recvfromwinsock函数的托管包装器。此函数接受指向sockaddr结构的指针,该结构是可选的,并在调用方端分配/释放。
考虑到这一点,我有一些理论,为什么EndPoint被称为ref而不是out
可能为了与winsock函数保持一致,EndPoint由调用方分配,因此由ref传递。
可能EndPoint在某个时候被认为是一个可选参数,但它从未实现(我检查过,它必须是非空的)。
对于某些协议,可能存在通过EndPoint参数传递的处理方向。甚至是未来的协议:-)

07-28 03:28