gpt4 book ai didi

c# - 不确定将 EndPoint 传递给 Socket.ReceiveFrom()

转载 作者:太空狗 更新时间:2023-10-29 23:47:36 27 4
gpt4 key购买 nike

如果我这样做:

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 方法是否只从正在传递的端点接收数据包?文档说明如下:

With connectionless protocols, ReceiveFrom will read the first enqueued datagram received into the local network buffer.

这是否意味着传递的 EndPoint 仅用于存储数据包所来自的主机的 EndPoint 而根本不影响 ReceiveFrom 方法的行为?如果是这样,为什么需要将其作为“ref”而不是“out”传递?

最佳答案

请注意,ReceiveFrom 方法是 recvfrom 的托管包装器WinSock 函数。此函数采用指向 sockaddr 结构的指针,该结构是可选的,并在调用方分配/取消分配。

考虑到这一点,我有一些理论为什么 EndPoint 作为 ref 而不是 out 传递:

  1. 可能为了与 WinSock 函数保持一致,EndPoint 由调用者分配,因此由 ref 传递。
  2. 也许 EndPoint 在某些时候被认为是一个可选参数,但这从未被实现(我检查过,它必须是非空的)。
  3. 也许对于某些协议(protocol),处理方向通过 EndPoint 参数传递。甚至 future 的协议(protocol) :-)

关于c# - 不确定将 EndPoint 传递给 Socket.ReceiveFrom(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9180328/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com