(WinSock),服务器的WSARecvFrom源IP地址应该填什么?

(WinSock), What should I fill in WSARecvFrom source ip address for server?

所以,我正在实现客户端和服务器之间的udp数据包通信。

我已经使用 WSASendTo

从服务器向客户端发送 udp 数据

对于客户端,WSARecvFrom中的参数sockaddr* ipFrom是服务器的端点。一切正常。

但是问题是服务器只使用了一个udp socket,所以不知道WSARecvFrom里的sockaddr* ipFrom参数应该填什么。由于每个客户端都有不同的ip,我无法指定源ip地址。

我试着在这个参数中只填入nullptr,但没有用。我尝试用服务器端点填充它,它起作用了。

但是如您所知,ipFrom 使用服务器端点没有意义,因为那不是源地址,所以我很好奇 address/endpoint 我应该填写什么 sockaddr* ipFrom.

编辑:顺便说一下,我在使用它之前将 udp 套接字绑定为服务器 ip/port。

the problem is that the server uses only one udp socket, so I don't know what should I fill in sockaddr* ipFrom parameter in WSARecvFrom.

没有。那不是你在那次通话中的责任。

But as you know, using server endpoint for ipFrom doesn't make sense because that is not source address, so I'm curious what address/endpoint should I fill in sockaddr* ipFrom.

None.

您似乎对 ipFrom 参数的含义有误解。它是一个 output 参数,而不是输入参数。所以你根本不需要向它提供任何数据。 WSARecvFrom() 收到 一个传入数据包。如果您想知道该数据包的发送者是谁(即,使用 WSASendTo() 发回后续回复),您可以提供指向分配的 sockaddr_... 的指针,然后 WSARecvFrom() 填充它与发件人的信息。 sockaddr_... 你自己根本就没有填写。

就像客户端收到服务器的数据包,WSARecvFrom()上报服务器的信息一样,服务器收到客户端的数据包,WSARecvFrom()上报客户端的信息也是一样的.