假设我有一个具有侦听套接字的简单winsock服务器,然后当接受连接时,它将套接字存储在套接字数组中(以允许多个连接)。 如何获取特定连接的IP地址?它是否存储在套接字句柄中?
答案 0 :(得分:8)
只要套接字保持连接,就可以获得自己的套接字地址和对等套接字地址。
getsockname 会为您提供本地名称(即从您管道旁边) getpeername 会为您提供对等名称(即管道的远端)
此信息仅在打开/连接套接字时可用,因此如果可以在对等连接断开后使用它,最好将其存储在某处。
答案 1 :(得分:3)
是的,它存储在socketaddr_in
结构中,您可以使用以下命令提取它:
SOCKADDR_IN client_info = {0};
int addrsize = sizeof(client_info);
// get it during the accept call
SOCKET client_sock = accept(serv, (struct sockaddr*)&client_info, &addrsize);
// or get it from the socket itself at any time
getpeername(client_sock, &client_info, sizeof(client_info));
char *ip = inet_ntoa(client_info.sin_addr);
printf("%s", ip);