本机收到UDP数据时,通过recvfrom函数可以直接获取发送者的地址:
int recvfrom(
__in SOCKET s,
__out char* buf,
__in int len,
__in int flags,
__out struct sockaddr* from,
__in_out int* fromlen
);
但recvfrom没有提供获取包的目标地址的方法,不久前遇到一个需要获取收到包的目标地址的情况,并找到了解决办法。WinSock提供了WSARecvMsg函数来解决类似问题:
int WSARecvMsg(
__in SOCKET s,
__in_out LPWSAMSG lpMsg,
__out LPDWORD lpdwNumberOfBytesRecvd,
__in LPWSAOVERLAPPED lpOverlapped,
__in LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
示例代码如下:
#include <WinSock2.h>
#include <MSWSock.h>
#include <WS2tcpip.h>
#in