sockaddr_in得到错误的 IP 地址,CPP
sockaddr_in gets wrong IP address, cpp
我正在尝试实现一个连接到给定地址的简单客户端。您会注意到,在将给定地址以及 IP 地址和端口放入sockaddr_in结构后,我正在打印它。我得到两个不同的地址,即使它应该是相同的。
这是我的代码:
int createConnection(char * address, char * port) {
cout << address << " " << port << endl;
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(atoi(port));
inet_aton(address,&(server.sin_addr));
memset(&(server.sin_zero), ' ', 8);
if ((sockFd = socket(PF_INET,SOCK_STREAM,0)) == -1) {
perror("client: socket");
}
if (connect(sockFd,(const sockaddr *)&server,sizeof(struct sockaddr_in)) == -1) {
close(sockFd);
perror("client: connect");
}
char s[INET_ADDRSTRLEN];
inet_ntop(AF_INET, (struct sockaddr *)&server, s, sizeof s);
printf("client: connecting to %s, %in", s, server.sin_port);
printf("connected");
return 0;
}
输出是
132.65.151.39 3000
client: connecting to 2.0.11.184, 47115
我的问题:
- 为什么我看到两个不同的地址?
- 为什么连接不失败?
发生的事情是我的程序稍后在 recv() 中被阻止,所以我认为它没有连接到我想要的地方。谢谢!
看起来你把错误的东西传递给inet_ntop()
:
inet_ntop(AF_INET, (struct sockaddr *)&server, s, sizeof s);
您可能应该通过.sin_addr
:
inet_ntop(AF_INET, &server.sin_addr, s, sizeof s);
对于端口,它打印错误,因为您需要调用ntohs()
才能转换回主机字节顺序:
printf("client: connecting to %s, %in", s, ntohs(server.sin_port));
连接有效,可能是因为地址设置正确,实际上。
相关文章:
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- C++ / Qt:如何检测主机名或IP地址何时引用当前系统?
- 使用 C++将 IP 地址附加到字符*
- 使用全局 IP 地址时,C++ winsock 2 应用程序中的代码是否必须更改?
- Rabbitmq 将本地主机更改为 IP 地址C++
- C++ - 使用代码块从文件中读取 IP 地址
- C 使用from_string创建IP地址的C 导致lambda错误
- 如何在解析过程中区分 IP 地址和域名
- 如何使用 asio 库获取 IP 地址的主机名
- IP地址匹配过滤功能
- 如何将C++ ulong 4 字节 IP 地址正确转换为 C# 类型
- 如何在NS3中设置节点的IP地址和数据?
- 如何从活动的 udp 连接获取远程 IP 地址和端口
- 无符号的 int 到 IP 地址字符串,不带 itoa/to_string/boost
- 如何在FD_SET内获取套接字的IP地址
- 使用Boost库中的PC中获取我的以太网设备IP地址的列表
- 使用静态IP地址时,ESP32 httpclient连接拒绝了
- C++检查有效的 IP 地址或 IP
- 如何使用 Poco::Net::HTTPSClientSession 绑定特定的源 IP 地址
- 如何在Windows上绕过主机文件获取真实的IP地址