天天看点

inet_ntoa在32位机器上没有问题,64位机器又问题

inet_ntoa就是将struct in_addr结构转换为IP地址的形式,用法如下:

char *inet_ntoa(struct in_addr in);  
           

在服务器端使用accept函数之后,会得到客户端连接的struct sockaddr结构,然后将其转换成struct sockaddr_in结构,此时可以在服务器端得到客户端连接的IP和端口数据。

但是如果在64位的机器上使用,发现现有错误,原因是因为在64位的机器上,inet_ntoa的返回值是一个整形。

解决办法:

方法1:引用#include <arpa/inet.h>头文件。

方法2:使用inet_ntop函数

inet_ntop使用:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main (void)
{
char IPdotdec[20]; //存放点分十进制IP地址
struct in_addr s; // IPv4地址结构体
// 输入IP地址
printf("Please input IP address: ");
scanf("%s", IPdotdec);
// 转换
inet_pton(AF_INET, IPdotdec, (void *)&s);
printf("inet_pton: 0x%x\n", s.s_addr); // 注意得到的字节序
// 反转换
inet_ntop(AF_INET, (void *)&s, IPdotdec, 16);
printf("inet_ntop: %s\n", IPdotdec);
}
           

继续阅读