就是怎么知道是那个IP发来的数据包
我的udp方式不是用的recvfrom ,而是GetQueuedCompletionStatus之后,调用的readfile,怎么弄?
通过GetQueuedCompletionStatus的这个lLPDWORD lpCompletionKey参数,能不能获得?
我的udp方式不是用的recvfrom ,而是GetQueuedCompletionStatus之后,调用的readfile,怎么弄?
通过GetQueuedCompletionStatus的这个lLPDWORD lpCompletionKey参数,能不能获得?
使用
int WSARecvFrom(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesRecvd,
LPDWORD lpFlags,
struct sockaddr* lpFrom,
LPINT lpFromlen,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
struct sockaddr* lpFrom,这个参数就是。把这个参数加入到LPWSAOVERLAPPED 结构里,在GetQueuedCompletionStatus返回后可以取到。
不要用ReadFile。
ReadFile是Winsock2还没出来的时候的MS折衷办法,效率不高,经常要在USER MODE和KERNEL MODE里切换。
而WSARecv WSARecvFrom WSASend WSASentTo这些都是专门优化过的,只要你的系统支持WINSOCK2
就改用这个