当前位置:网站首页>inet_ Pton () and INET_ Detailed explanation of ntop() function
inet_ Pton () and INET_ Detailed explanation of ntop() function
2020-11-09 11:32:00 【Pile】
1. hold ip The address is converted into a binary value for network transmission
int inet_aton(const char *cp, struct in_addr *inp);
inet_aton() transformation Network host address ip( Such as 192.168.1.10) by Binary values , And stored in struct in_addr In structure , That's the second parameter *inp, Function returns non 0 Express cp The host is efficient , return 0 Indicates that the host address is invalid .( This conversion cannot be used for network transmission , You also need to call htons or htonl Function to convert host byte order to network byte order )
in_addr_t inet_addr(const char *cp);
inet_addr Function conversion Network host address ( Such as 192.168.1.10) by Network byte order binary value , If parameters char *cp Invalid , The function returns -1(INADDR_NONE), This function is dealing with address 255.255.255.255 When you go back to -1,255.255.255.255 Is a valid address , however inet_addr Unable to deal with ;
2. Convert the binary value of network transmission into dot decimal ip Address
char *inet_ntoa(struct in_addr in);
inet_ntoa function Translate network byte sort address by The standard ASCII Addresses separated by dots , This function returns the address of the string pointing to the point separated ( Such as 192.168.1.10) The pointer to , Space allocated for the static string , This means that when the function is called the second time , The last call will be overridden ( Covering ), So if you need to save the string, you can copy it and manage it yourself !
How do we output a dot decimal IP Well ? Let's take a look at the following program :
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
int main()
{
struct in_addr addr1,addr2;
ulong l1,l2;
l1= inet_addr("192.168.0.74");
l2 = inet_addr("211.100.21.179");
memcpy(&addr1, &l1, 4);
memcpy(&addr2, &l2, 4);
printf("%s : %s\n", inet_ntoa(addr1), inet_ntoa(addr2)); // Pay attention to the result of this sentence
printf("%s\n", inet_ntoa(addr1));
printf("%s\n", inet_ntoa(addr2));
return 0;
}
The actual operation results are as follows :
192.168.0.74 : 192.168.0.74 // You can see it here ,printf Inside inet_ntoa Only run once .
192.168.0.74
211.100.21.179
inet_ntoa Return to one char *, And this char * The space is in inet_ntoa It's statically allocated , therefore inet_ntoa Subsequent calls will override the previous call . The first sentence printf The result can only show that in printf Variable parameters in it It's evaluated from right to left Of , That's it .
3. New network address translation function inet_pton and inet_ntop
These two functions follow IPv6 Functions that appear , about IPv4 Address and IPv6 All addresses apply , Function p and n Each represents the expression (presentation) And numbers (numeric). Address is usually expressed in the form of ASCII character string , The numeric format is a binary value stored in the socket address structure .
#include <arpa/inet.h>
int inet_pton(int family, const char *strptr, void *addrptr); // Will be dotted decimal ip The address is converted into a numeric format for network transmission
Return value : If successful 1, If the input is not a valid expression 0, In case of error -1
const char * inet_ntop(int family, const void *addrptr, char *strptr, size_t len); // Convert numerical format to dot decimal ip Address format
Return value : If successful, a pointer to the structure , In case of error NULL
(1) Of these two functions family The parameter can be either AF_INET(ipv4) It can also be AF_INET6(ipv6). If , Take an unsupported address family as family Parameters , Both functions return an error , And will errno Set as EAFNOSUPPORT.
(2) The first function attempts to convert from strptr The string that the pointer points to , And pass addrptr The pointer holds the binary result , If successful, the return value is 1, Otherwise, if specified family The input string is not a valid expression format , So the return value is zero 0.
(3)inet_ntop Do the opposite conversion , From the numerical format (addrptr) Convert to expression (strptr).inet_ntop Functional strptr Parameter cannot be a null pointer . The caller must allocate memory for the target storage unit and specify its size , When the call succeeds , This pointer is the return value of the function .len Parameter is the size of the target storage unit , To prevent the function from overflowing its caller's buffer . If len Too small , Not enough to hold expression results , Then return a null pointer , Juxtaposition as errno by ENOSPC.
4. Example
inet_pton(AF_INET, ip, &foo.sin_addr); // Instead of foo.sin_addr.addr=inet_addr(ip);
char str[INET_ADDRSTRLEN];
char *ptr = inet_ntop(AF_INET,&foo.sin_addr, str, sizeof(str)); // Instead of ptr = inet_ntoa(foo.sin_addr)
版权声明
本文为[Pile]所创,转载请带上原文链接,感谢
边栏推荐
- Wealth and freedom? Ant financial services suspended listing, valuation or decline after regulation
- AI fresh student's annual salary has increased to 400000, you can still make a career change now!
- Gather in Beijing! Openi / O 2020 Qizhi Developer Conference enters countdown
- 向北京集结!OpenI/O 2020启智开发者大会进入倒计时
- 手写数字图片识别-卷积神经网络
- Front end code style practice prettier + eslint + git hook + lint staged
- Learning notes of nodejs
- Using stream to read and write files to process large files
- Mac 终端(terminal) oh-my-zsh+solarized配置
- When Python calls ffmpeg, 'ffmpeg' is not an internal or external command, nor a runnable program
猜你喜欢

Adobe Experience Design /Xd 2020软件安装包(附安装教程)

Android check box and echo

An attempt to read or write to protected memory occurred using the CopyMemory API. This usually indicates that other memory is corrupted.

Visual Studio (MAC) installation process notes

Understanding runloop in OC

C++在C的基础上改进了哪些细节

Handwritten digital image recognition convolution neural network

How to ensure that messages are not consumed repeatedly? (how to ensure the idempotent of message consumption)

Wechat circle

ThinkPHP框架执行流程源码解析
随机推荐
1450. 在既定时间做作业的学生人数
Reading design patterns adapter patterns
[QT] subclass qthread to realize multithreading
SHOW PROFILE分析SQL语句性能开销
A simple ability determines whether you will learn!
Program life: from Internet addicts to Microsoft, bat and byte offer harvesters
Handwritten digital image recognition convolution neural network
零基础IM开发入门(四):什么是IM系统的消息时序一致性?
2020.11.07面试总结(面试12k)
As a user, you can't get rid of the portrait!
Large scale project Objective-C - nsurlsession access SMS verification code application example sharing
GLSB涉及负载均衡算法
VisualStudio(Mac)安装过程笔记
Rainbow sorting | Dutch flag problem
1486. 数组异或操作
未来中国电信将把云计算服务打造成为中国电信的主业
050_ object-oriented
Glsb involves load balancing algorithm
SQL第二章第三章
理解Task和和async await