我是一个socket编程新手。这是一个片段:
struct sockaddr_storage client_addr;
...
client_addr_size = sizeof(client_addr);
client_socket = accept( server_socket,
(struct sockaddr *)&client_addr, &client_addr_size );
...
result = inet_ntop( AF_INET,
&((struct sockaddr_in *)&client_addr)->sin_addr,
client_addr_str, sizeof(client_addr_str) );
我是一名服务员。每当客户端连接地址时,无论主机是什么,我得到的都是0.0.0.0。谁能解释一下,我做错了什么?
感谢。
答案 0 :(得分:2)
检查client_addr.ss_family
- 它可能会返回AF_INET6
家庭住址。
答案 1 :(得分:0)
您可以显示更多代码...您尝试连接的IP地址/服务是什么?
线索在IP地址本身,0.0.0.0,通常是网络接口没有分配IP地址的情况,可能正在寻找DHCP服务器来从某个地方续订/接受DHCP租约。
由于你没有提供足够的信息,因为我没有提供足够的信息,所以我认为这样做是不公平的,并且由于这个答案不能满足你的问题而被投票结果!
答案 2 :(得分:0)
只是一个猜测 - client_addr_str
的声明是什么?如果它是char*
,则sizeof(client_addr_str)
将返回指针的大小(4或8,具体取决于32位或64位平台。)请尝试以下操作:
char client_addr_str[INET_ADDRSTRLEN];
if ( inet_ntop( AF_INET,
&((struct sockaddr_in *)&client_addr)->sin_addr,
client_addr_str, INET_ADDRSTRLEN ) == NULL )
{
/* complain */
}