如何解决c ++ Windows 10为连接的客户端获取IP
我已经建立了一个工作正常的WinSock2套接字,并且该客户机可以连接,如何获得已连接客户机的IP地址。
解决方法
第一次接受客户端时,accept()
报告客户端的IP地址。也可以随时使用getpeername()
从客户端SOCKET
进行查询。这两个函数都根据您使用sockaddr_...
创建服务器套接字时分配的地址类型,填充了必须分配并传递的socket()
结构:
- 如果为
AF_INET
,请提供一个sockaddr_in
结构:
sockaddr_in clientAddr;
int clientAddrSize = sizeof(clientAddr);
SOCKET client = accept(server,(sockaddr*)&client_addr,&clientAddrSize);
if (client != INVALID_SOCKET)
{
// use client_addr.sin_addr as needed...
...
clientAddrSize = sizeof(clientAddr);
if (getpeername(client,&clientAddrSize) == 0)
{
// use client_addr.sin_addr as needed...
}
...
closesocket(client);
}
- 如果启用了
AF_INET6
的{{1}},请提供IPV6_V6ONLY
结构:
sockaddr_in6
- 如果禁用了
sockaddr_in6 clientAddr; int clientAddrSize = sizeof(clientAddr); SOCKET client = accept(server,&clientAddrSize); if (client != INVALID_SOCKET) { // use client_addr.sin6_addr as needed... ... clientAddrSize = sizeof(clientAddr); if (getpeername(client,&clientAddrSize) == 0) { // use client_addr.sin6_addr as needed... } ... closesocket(client); }
的{{1}},请提供一个AF_INET6
结构,然后查看其IPV6_V6ONLY
字段以了解是否将sockaddr_storage
数据强制转换为ss_family
或sockaddr_storage
:
sockaddr_in
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。