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

标签 c

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

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/

相关文章:

c - 如何在 MACOS 上将 GLUE 与 CUDA 结合使用?

c - 是否有 C 函数来查找字符串中第二次出现的子字符串?

c - 在目录树中搜索文件

c - 我在 Code::Block IDE 上得到了一个 "Warning: Array subscript have type ' char'"?

c - lldb C局部变量不打印

c++ - TCP 使用 htonl 和 htons 进行文件传输

c - execvp系统调用问题

c - 使用 union 标准化位字段(使它们可移植)

c - 如果进程意外终止,您如何取消链接共享内存段?

c - 指向结构内部的结构指针的空指针而不取消引用它