假设我有一个简单的 winsock 服务器,它有一个监听套接字,然后当一个连接被接受时,它将套接字存储在一个套接字数组中(以允许多个连接)。如何获取特定连接的 IP 地址?它是否存储在套接字句柄中?
问问题
12335 次
2 回答
8
只要套接字保持连接,您就可以获得自己的套接字地址和对等地址。
getsockname将为您提供本地名称(即来自管道的一侧) getpeername将为您提供对等名称(即管道的远端)
此信息仅在套接字打开/连接时可用,因此如果在对等断开后可以使用它,最好将其存储在某个地方。
于 2013-03-13T10:21:03.783 回答
6
是的,它存储在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);
于 2013-03-13T10:16:20.333 回答