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("\n",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
posted on 2015-11-23 12:09 zyz913614263 阅读(6601) 评论(0) 编辑 收藏 举报