我有一个服务器正在监听端口
该请求从我的本地客户端发送到在我的本地电脑上运行的服务器。
以下是我的代码片段
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 套接字,我成功接收了缓冲区。
最佳答案
参见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 Network Planning 的副本。
关于c - 为什么我从recvfrom()获取远程IP地址0.0.0.0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19596741/