zoukankan      html  css  js  c++  java
  • linux网络编程 inet_aton(); inet_aton; inet_addr;

    1. inet_aton()是一个改进的方法来将一个字符串IP地址转换为一个32位的网络序列IP地址。
    
    2. inet_ntoa()  本函数将一个用in参数所表示的Internet地址结构转换成以“.” 间隔的诸如“a.b.c.d”的字符串形式。 若无错误发生,inet_ntoa()返回一个字符指针。否则的话,返回NVLL。
    
    3. in_addr_t inet_addr(const char *cp);
    成功:返回成功转换的ip地址,输入字符串有效 返回0:输入字符串有错,返回-1。
    所在头文件:<arpa/inet.h>
    若无错误发生,inet_addr()返回一个无符号长整型数,其中以适当字节顺序存放Internet地址。如果传入的字符串不是一个合法的Internet地址,如“a.b.c.d”地址中任一项超过255,那么inet_addr()返回INADDR_NONE。在IP只有一部分时(即没有 ”.“ 时),IP的字符串如果只由数字组成,inet_addr()不检查数字是否大于255
    函数概要如下:
      头文件:#include <sys/socket.h>
      #include <netinet/in.h>
      #include <arpa/inet.h>
      完整描述:
      int inet_aton(const char *string, struct in_addr*addr);
      参数描述:
      1 输入参数string包含ASCII表示的IP地址。
      2 输出参数addr是将要用新的IP地址更新的结构。
      返回值:
      如果这个函数成功,函数的返回值非零,如果输入地址不正确则会返回零。使用这个函数并没有错误码存放在errno中,所以他的值会被忽略。
    函数说明及举例:
      对于这个函数有一点迷惑的就是这个函数调用所需要的两个参数。
      如果我们定义了一个AF_INET套接口地址:
      struct sockaddr_in adr_inet; /* AF_INET */
      提供给inet_aton函数调用的参数指针为 &adr_inet.sin_addr
      下面这个程序使用inet_aton函数,而不是我们在前面所谈到的in_addr函数。
      /*
      * inetaton.c
      static void bail(const char *on_what)
      {
      fputs(on_what,stderr);
      fputs("
    ",stderr);
      }
      int main(int argc,char **argv)
      {
      int z;
      struct sockaddr_in adr_inet; /* AF_INET */
      int len_inet; /* length */
      int sck_inet; /* Socket */
      /* Create a Socket */
      sck_inet = socket(AF_INET,SOCK_STREAM,0);
      if(sck_inet == -1)
      bail("Socket()");
      /* Establish address */
      memset(&adr_inet,0,sizeof adr_inet);
      adr_inet.sin_family = AF_INET;
      adr_inet.sin_port = htons(9000); .
      if( !inet_aton("127.0.0.1",&adr_inet.sin_addr))
      bail("bad address");
      len_inet = sizeof adr_inet;
      /* Bind it to the socket */
      z = bind(sck_inet,(struct sockaddr *)&adr_inet,len_inet);
      if(z == -1)
      bail("bind()");
      /* Display our socket address */
      system("netstat -pa --tcp 2>/dev/null"
      " | grep inetaton");
      return 0;
      }
      程序的运行结果如下:
      S$ ./inetaton
      tcp 0 0 127.0.0.23:9000 *:* CLOSE 1007/inetaton
  • 相关阅读:
    跨域是什么
    【剑指offer】05-替换空格
    【剑指offer】04-二维数组中的查找
    【剑指offer】03-变态跳台阶
    【剑指offer】02-青蛙跳台阶
    【剑指offer】01-斐波那契数列
    python面向对象-类和实例
    LibreOffice字体问题解决;从window复制到Ubuntu
    Far manager界面混乱问题解决
    Ubuntu-18.04.2-几个启动错误解决办法
  • 原文地址:https://www.cnblogs.com/zendu/p/4988005.html
Copyright © 2011-2022 走看看