inet_addr 和inet_ntoa函数作用

  • Post author:
  • Post category:其他



我们使用socket进行通信的时候,我们需要指定三个元素:

通信域(地址族)、IP地址、端口号

,这三个元素由SOCKADDR_IN结构体定义,为了简化编程一般将IP地址设置为INADDR_ANY,如果需要使用特定的IP地址则需要使用

inet_addr 和inet_ntoa完成字符串和in_addr结构体的互换

,in_addr是SOCKADDR_IN成员,其代表IP地址。


inet_add函数声明如下:

unsigned long inet_addr(const char* cp);


参数:


cp代表点分十进制的IP地址,如1.2.3.4




inet_ntoa 函数声明如下:


char* inet_ntoa(struct in_addr in);


参数:


in代码in_addr的结构体,其结构体如下:


struct in_addr 
{
    union 
    {
        struct { UCHAR s_b1,s_b2,s_b3,s_b4; } S_un_b;
        struct { USHORT s_w1,s_w2; } S_un_w;
        ULONG S_addr;
    } S_un;
};




函数使用代码如下:


SOCKADDR_IN sock;
sock.sin_family = AF_INET;
//将字符串转换为in_addr类型
sock.sin_addr.S_un.S_addr =  inet_addr("192.168.1.111");
sock.sin_port = htons(5000);

//将in_addr类型转换为字符串
printf("inet_ntoa ip = %s\n",inet_ntoa(sock.sin_addr));

结果输出:


inet_ntoa ip = 192.168.1.111



版权声明:本文为xiao3404原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。