- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试编写服务器应用程序。我想获得客户的IP。我的问题是 inet_ntop 函数。我无法让它正常工作。这是我的用法:
void client_loop(uint16_t port) {
int cfd;
int socket = bind_socket(port, INADDR_ANY);
char ip[INET_ADDRSTRLEN];
struct sockaddr client_addr;
struct sockaddr_in *addr_in;
socklen_t cli_len;
while (work) {
if ((cfd = TEMP_FAILURE_RETRY(accept(socket, &client_addr, &cli_len))) < 0) {
if (EAGAIN == errno || EWOULDBLOCK == errno)
continue;
ERR("accept");
}
addr_in=(struct sockaddr_in *)&client_addr;
inet_ntop(AF_INET, &(addr_in->sin_addr),ip, sizeof(ip));
printf("INET_NTOP: %s\n",ip);
}
}
inet_ntop 的第一次使用总是返回 0.0.0.0 然后它正常工作。当我将 inet_ntop 移动到外部函数时,它仅适用于来自本地主机的连接。谢谢。
编辑:
已修复。问题是 cli_len 没有初始化,所以 accept 没有填充 client_addr。
这条线就像老板一样工作:
socklen_t cli_len=sizeof(struct sockaddr);
最佳答案
我找不到问题,但我看到您已将 cli_len 作为参数,但您必须使用 sizeof(ip) 代替 inet_ntop 的第 4 个参数 (cli_len)。并且在调用 inet_ntop 之前也请检查 cli_len
关于c - inet_ntop 在第一次使用时返回 0.0.0.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18915676/
我正在尝试从 inet_ntop 打印一个 ip 地址,但输出似乎很奇怪。 该程序似乎运行良好,我成功连接了套接字,但它打印了以下内容: H��H9�u�H�[]A\A]A^A_�ff.� 这是我的代
我有问题。我有代码需要将域名转换为IP。为此,我使用函数 getaddrinfo()。但似乎当我调用另一个函数(在 GETADDRINFO() 之后)时,我的程序崩溃了(getaddrinfo 返回错
我正在使用 C 构建 TCP 服务器:我包含了 inet_ntop() 函数所在的库 (WS2tcpip.h),但我的编译器返回以下错误: 'inet_ntop' was not declared i
#include #include #include "stdio.h" int main(int argc, wchar_t *argv[]) { //init Windows Sock
首先,我的代码示例: cout ai_addr)->sin_addr , ip4, INET_ADDRSTRLEN)) { return ERROR_PAR; } cout #include
请帮助我!我需要将域名(例如 google.com)翻译(或转换)为 IP 地址。为此,我在网上找到了代码,它工作得很好,但我不明白,为什么调用函数 inet_ntop() 两次。请帮我。这是代码:
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我曾经认为 inet_ntop 的第二个参数应该始终是 struct in_addr 或 struct in6_addr。但后来我查了一下 POSIX definition : const char
我试图了解如何通过套接字连接互联网。(但我卡住了。段错误的原因。)我不明白为什么这段代码会出现段错误:S 你能帮帮我吗。 int main() { int status; WSADAT
如何将函数 inet_ntop (const char *) 的返回值转换为 string? 代码: string ip = inet_ntop(b->ifa_addr->sa_family,temp
#include char buf[INET6_ADDRSTRLEN] = {}; int af = AF_INET; unsigned char addr[4] = {0x7f, 0x0, 0x0
在 Rust 中是否有现成的方法将 ip 地址(v4 和 v6)从二进制格式转换为文本格式(相当于 inet_ntop)? 例子: "3701A8C0" 转换为 "55.1.168.192", "20
我似乎从 inet_ntop 取回了错误的 IPv6 字符串,尤其是在它试图丢弃零序列以支持“::”的地址时。 这是代码; #include #include #include int main
您好,我创建了一个函数,该函数将接受的 sockFD 作为输入,并将表示形式的 ip 地址输出为字符串。该函数似乎工作正常,直到我开始使用 inet_ntop 的调用来打包字符串,该调用返回一个空指针
我正在创建一个 UDP 服务器客户端程序。客户端请求文件,服务器如果找到则将其发送给客户端。基于 Beej 的网络指南, inet_ntoa() returns the dots-and-number
我正在尝试根据此处给出的教程用 C++ 创建一个基本的网络服务器: https://vichargrave.github.io/articles/2013-02/tcp-ip-network-prog
我正在尝试将 sockaddr_storage 转换为 sockadd_in,这样我就可以打印出数据报包的源 IP 地址,我似乎无法获得正确的类型转换, struct sockaddr_storage
这是一个相当基本的问题,令我惊讶的是,我今天遇到了一个问题。 在我看来,inet_pton 和 inet_ntoa 正在反转它们给定的 IP 地址的字节: DWORD IP; inet_pton(AF
我正在 Linux 上开发一个应用程序。 Linux执行命令: ifconfig eth0 192.168.10.15 netmask 255.255.255.0 在使用 systemd 的引导过程中
我在 Windows XP 上收到错误“程序入口点 inet_ntop 无法位于动态链接库 WS2_32.dll 中”,经过一番谷歌搜索后,我发现 inet_ntop 在 XP 中不可用,所以我制作了
我是一名优秀的程序员,十分优秀!