inet_ntop(), inet_pton()

来源:百度文库 编辑:神马文学网 时间:2024/06/03 11:02:58
Convert IP addresses from a dots-and-number string to a struct in_addr and back
Prototypes
#include #include #include // ALL THESE ARE DEPRECATED! Use inet_pton() or inet_ntop() instead!!char *inet_ntoa(struct in_addr in);int inet_aton(const char *cp, struct in_addr *inp);in_addr_t inet_addr(const char *cp);Description
These functions are deprecated because they don't handle IPv6! Use inet_ntop() or inet_pton() instead! They are included here because they can still be found in the wild.
All of these functions convert from a struct in_addr (part of your struct sockaddr_in, most likely) to a string in dots-and-numbers format (e.g. "192.168.5.10") and vice-versa. If you have an IP address passed on the command line or something, this is the easiest way to get a struct in_addr to connect() to, or whatever. If you need more power, try some of the DNS functions like gethostbyname() or attempt a coup d'État in your local country.
The function inet_ntoa() converts a network address in a struct in_addr to a dots-and-numbers format string. The "n" in "ntoa" stands for network, and the "a" stands for ASCII for historical reasons (so it's "Network To ASCII"—the "toa" suffix has an analogous friend in the C library called atoi() which converts an ASCII string to an integer.)
The function inet_aton() is the opposite, converting from a dots-and-numbers string into a in_addr_t (which is the type of the field s_addr in your struct in_addr.)
Finally, the function inet_addr() is an older function that does basically the same thing as inet_aton(). It's theoretically deprecated, but you'll see it a lot and the police won't come get you if you use it.
Return Value
inet_aton() returns non-zero if the address is a valid one, and it returns zero if the address is invalid.
inet_ntoa() returns the dots-and-numbers string in a static buffer that is overwritten with each call to the function.
inet_addr() returns the address as an in_addr_t, or -1 if there's an error. (That is the same result as if you tried to convert the string "255.255.255.255", which is a valid IP address. This is why inet_aton() is better.)
Example
struct sockaddr_in antelope;char *some_addr;inet_aton("10.0.0.1", &antelope.sin_addr); // store IP in antelopesome_addr = inet_ntoa(antelope.sin_addr); // return the IPprintf("%s\n", some_addr); // prints "10.0.0.1"// and this call is the same as the inet_aton() call, above:antelope.sin_addr.s_addr = inet_addr("10.0.0.1");对inet_ntop() , inet_pton()理解:n代表network, p代表:printable即:可打印。IP的字符串与其网络表示结构进行相互转换。例:"192.168.1.41"与struct sin_addr 结构进行相互转换。因为函数需要对参数赋值,所以需要参数的指针传的。