2

我有一个服务器正在侦听端口
请求从我的本地客户端发送到在我的本地 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 套接字,我成功地收到了缓冲区。

4

1 回答 1

2

请参阅TCP recvfrom() 不存储 'from' - 显然 TCP 不支持它。您所看到的只是最初存在的零字节。这就是为什么remote_len返回 0 - 因为没有设置地址。

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

于 2013-10-25T20:34:56.980 回答