- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
您好,我创建了一个函数,该函数将接受的 sockFD 作为输入,并将表示形式的 ip 地址输出为字符串。该函数似乎工作正常,直到我开始使用 inet_ntop 的调用来打包字符串,该调用返回一个空指针,从而给了我错误。错误显示为 No space left on device 我不明白,因为我有足够的 ram 和 rom。不管怎样,下面是我正在使用的功能。
void getTheirIp(int s, char *ipstr){ // int s is the incoming socketFD, ipstr points the the calling
// functions pointer.
socklen_t len;
struct sockaddr_storage addr;
len = sizeof(addr); //I want to store my address in addr which is sockaddr_storage type
int stat;
stat = getpeername(s, (struct sockaddr*)&addr, &len); // This stores addrinfo in addr
printf("getTheirIP:the value of getpeername %d\n",stat);
// deal with both IPv4 and IPv6:
if ((stat=addr.ss_family) == AF_INET) { // I get the size of the sock first
printf("getTheirIP:the value of addr.ss_family is %d\n",stat);
ipstr = malloc(INET_ADDRSTRLEN); // I allocate memory to store the string
struct sockaddr_in *s = (struct sockaddr_in *)&addr; // I then create the struct sockaddr_in which
// is large enough to hold my address
if(NULL == inet_ntop(AF_INET, &s->sin_addr, ipstr, sizeof(ipstr))){ // I then use inet_ntop to
printf("getTheirIP:the value of inet_ntop is null\n");// retrieve the ip address and store
perror("The problem was"); // at location ipstr
}
} else { // AF_INET6 this is the same as the above except it deals with IPv6 length
ipstr = malloc(INET6_ADDRSTRLEN);
struct sockaddr_in6 *s = (struct sockaddr_in6 *)&addr;
inet_ntop(AF_INET6, &s->sin6_addr, ipstr, sizeof(ipstr));
}
printf("%s",ipstr);
}
我遗漏了程序的其余部分,因为它太大了,我只想专注于修复这部分。但是,下面我将向您展示调用此函数的 main() 部分。
newSock = accept(listenSock,(struct sockaddr *)&their_addr,&addr_size);
char *someString;
getTheirIp(newSock,someString);
任何帮助都会很棒。谢谢!
最佳答案
inet_ntop(AF_INET, &s->sin_addr, ipstr, sizeof(ipstr))
sizeof
是错误的,因为 ipstr
是一个指针(它将产生指针的大小,类似于 4
或 8
)。您需要传递 ipstr
缓冲区的可用长度。
关于c - inet_ntop : No space left on device,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9235798/
我正在尝试从 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 中不可用,所以我制作了
我是一名优秀的程序员,十分优秀!