为什么我从recvfrom()获取远程IP地址0.0.0.0?

时间:2013-10-25 18:11:57

标签: c

我有一个服务器正在监听端口
请求从我的本地客户端发送到在我的本地PC上运行的服务器 以下是我的代码段

remote_len = sizeof(remote_addr);
if ((bytes=recvfrom(sockfd, buf, MAXBUFLEN , 0,
(struct sockaddr *)&remote_addr, &remote_len)) <= 0) {
    exit(1);
}

printf("remote ip = %s\n",inet_ntoa(remote_addr.sin_addr));

当我打印ip时,我得到0.0.0.0 ??
这不是我想要打印的远程IP地址吗? 编辑:它是一个TCP套接字,我成功接收缓冲区。

1 个答案:

答案 0 :(得分:2)

请参阅TCP recvfrom() doesn't store 'from' - 显然TCP不支持。你所看到的只是原来的零字节。这就是remote_len返回0的原因 - 因为没有设置地址。

该链接是与Windows相关的文档;我没有在Linux手册页中看到这种行为,它只表示“可能用于接收套接字上的数据,无论它是否是面向连接的”,但在http://www.beej.us/guide/bgnet/output/html/multipage/recvman.html它表示recvfrom用于UDP 。不幸的是,在Harbison + Steele中没有提到它,我找不到Unix网络编程的副本。