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
  • 相关阅读:
    CSU 1505: 酷酷的单词【字符串】
    HDU 2036 改革春风吹满地【计算几何/叉乘求多边形面积】
    HDU 2034 人见人爱A-B【STL/set】
    HDU 2031 进制转换
    HDU 1020 Encoding【连续的计数器重置】
    HDU 1999 不可摸数【类似筛法求真因子和】
    动态规划总结
    CSU 1785: 又一道简单题
    CSU 1779: 错误的算法【矩阵/模拟】
    CSU 1777: 大还是小?【模拟/后导0】
  • 原文地址:https://www.cnblogs.com/zendu/p/4988005.html
Copyright © 2011-2022 走看看