- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 inet_ntop 打印一个 ip 地址,但输出似乎很奇怪。
该程序似乎运行良好,我成功连接了套接字,但它打印了以下内容:
H��H9�u�H�[]A\A]A^A_�ff.�
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
#include <string.h>
#include <arpa/inet.h>
int main(int argc, char *argv[]){
int sock = socket(AF_INET, SOCK_STREAM, 0);
struct addrinfo hints, *result;
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = 0;
hints.ai_flags = 0;
int s = getaddrinfo("irc.root-me.org", "6667", &hints, &result);
if( s != 0){
printf("erreur\n");
exit(EXIT_FAILURE);
}
int f = connect(sock, result->ai_addr, result->ai_addrlen);
if(f != 0){
printf("erreur connect\n");
}
struct sockaddr_in *sockin;
sockin = (struct sockaddr_in *)result->ai_addr;
char *dst;
inet_ntop(AF_INET, &sockin->sin_addr, dst, sizeof(char *));
printf("%s\n", dst);
freeaddrinfo(result);
exit(0);
}
最佳答案
这里有两个问题:
inet_ntop()
的第三个参数应该是 char
-array 或指向 char
第一个元素的指针-大批。 inet_ntop()
的第四个参数应该是 尺寸 目标缓冲区,其地址作为第三个参数传递。 char
-指针
dst
作为目的地并告诉函数它将指向
sizeof(char*)
字节内存。
AF_INET
地址(形式为
xxx.xxx.xxx.xxx
)最多使用 4x3 个字符加上 3 个分隔符
.
char
s 的总和为 15
char
s 加 1 个附加
char
用作
0
-terminator 使其成为 C-"string",因此更正后的代码如下所示:
char dst[16] = ""; /* inet_ntop() does not necessarily 0-terminates the result. */
inet_ntop(AF_INET, &sockin->sin_addr, dst, sizeof dst);
INET_ADDRSTRLEN
(如果可用)而不是硬编码的“魔数(Magic Number)”
16
为 IPv4 地址的文本表示定义缓冲区大小。这是一件好事。
inet_ntop()
的文档在这儿:
关于c - 错误的输出 inet_ntop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31222273/
我正在尝试从 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 中不可用,所以我制作了
我是一名优秀的程序员,十分优秀!