好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 詳解inet_pton()和inet_ntop()函數

詳解inet_pton()和inet_ntop()函數

熱門標簽:地圖標注資源分享注冊 廊坊地圖標注申請入口 慶陽外呼系統定制開發 高德地圖標注公司位置需要錢嗎 合肥阿里辦理400電話號 怎么去掉地圖標注文字 襄陽外呼增值業務線路解決方案 北京外呼系統咨詢電話 海南人工外呼系統哪家好

inet_pton是一個IP地址轉換函數,可以在將IP地址在“點分十進制”和“二進制整數”之間轉換,而且inet_pton和inet_ntop這2個函數能夠處理ipv4和ipv6。算是比較新的函數了。

1.把ip地址轉化為用于網絡傳輸的二進制數值

int inet_aton(const char *cp, struct in_addr *inp);

inet_aton() 轉換網絡主機地址ip(如192.168.1.10)為二進制數值,并存儲在struct in_addr結構中,即第二個參數*inp,函數返回非0表示cp主機有地有效,返回0表示主機地址無效。(這個轉換完后不能用于網絡傳輸,還需要調用htons或htonl函數才能將主機字節順序轉化為網絡字節順序)

in_addr_t inet_addr(const char *cp);

inet_addr函數轉換網絡主機地址(如192.168.1.10)為網絡字節序二進制值,如果參數char *cp無效,函數返回-1(INADDR_NONE),這個函數在處理地址為255.255.255.255時也返回-1,255.255.255.255是一個有效的地址,不過inet_addr無法處理;

2.將網絡傳輸的二進制數值轉化為成點分十進制的ip地址

char *inet_ntoa(struct in_addr in);

inet_ntoa 函數轉換網絡字節排序的地址為標準的ASCII以點分開的地址,該函數返回指向點分開的字符串地址(如192.168.1.10)的指針,該字符串的空間為靜態分配的,這意味著在第二次調用該函數時,上一次調用將會被重寫(復蓋),所以如果需要保存該串最后復制出來自己管理! 

我們如何輸出一個點分十進制的IP呢?我們來看看下面的程序:

#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)); //注意這一句的運行結果  
 printf("%s\n", inet_ntoa(addr1));  
 printf("%s\n", inet_ntoa(addr2)); 
 return 0;  
} 

實際運行結果如下: 

192.168.0.74 : 192.168.0.74          //從這里可以看出,printf里的inet_ntoa只運行了一次。  

192.168.0.74  

211.100.21.179  

inet_ntoa返回一個char *,而這個char *的空間是在inet_ntoa里面靜態分配的,所以inet_ntoa后面的調用會覆蓋上一次的調用。第一句printf的結果只能說明在printf里面的可變參數的求值是從右到左的,僅此而已。

3.新型網路地址轉化函數inet_pton和inet_ntop

這兩個函數是隨IPv6出現的函數,對于IPv4地址和IPv6地址都適用,函數中p和n分別代表表達(presentation)和數值(numeric)。地址的表達格式通常是ASCII字符串,數值格式則是存放到套接字地址結構的二進制值。

#include arpe/inet.h>
int inet_pton(int family, const char *strptr, void *addrptr);   //將點分十進制的ip地址轉化為用于網絡傳輸的數值格式
    返回值:若成功則為1,若輸入不是有效的表達式則為0,若出錯則為-1
 
const char * inet_ntop(int family, const void *addrptr, char *strptr, size_t len);   //將數值格式轉化為點分十進制的ip地址格式
    返回值:若成功則為指向結構的指針,若出錯則為NULL

(1)這兩個函數的family參數既可以是AF_INET(ipv4)也可以是AF_INET6(ipv6)。如果,以不被支持的地址族作為family參數,這兩個函數都返回一個錯誤,并將errno置為EAFNOSUPPORT.

(2)第一個函數嘗試轉換由strptr指針所指向的字符串,并通過addrptr指針存放二進制結果,若成功則返回值為1,否則如果所指定的family而言輸入字符串不是有效的表達式格式,那么返回值為0.

(3)inet_ntop進行相反的轉換,從數值格式(addrptr)轉換到表達式(strptr)。inet_ntop函數的strptr參數不可以是一個空指針。調用者必須為目標存儲單元分配內存并指定其大小,調用成功時,這個指針就是該函數的返回值。len參數是目標存儲單元的大小,以免該函數溢出其調用者的緩沖區。如果len太小,不足以容納表達式結果,那么返回一個空指針,并置為errno為ENOSPC。

4.示例

inet_pton(AF_INET, ip, foo.sin_addr);  // 代替 foo.sin_addr.addr=inet_addr(ip);

char str[INET_ADDRSTRLEN];
char *ptr = inet_ntop(AF_INET,foo.sin_addr, str, sizeof(str));   // 代替 ptr = inet_ntoa(foo.sin_addr)

總結

以上所述是小編給大家介紹的inet_pton()和inet_ntop()函數,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

標簽:商丘 綿陽 平頂山 鶴崗 哈密 鎮江 臺州 株洲

巨人網絡通訊聲明:本文標題《詳解inet_pton()和inet_ntop()函數》,本文關鍵詞  詳解,inet,pton,和,ntop,函數,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解inet_pton()和inet_ntop()函數》相關的同類信息!
  • 本頁收集關于詳解inet_pton()和inet_ntop()函數的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 女生的小坤坤大全高清壁纸视频| 操女人视频网站| 好紧好爽再搔一点浪一点老板| 特级丰满少妇一级AAAA爱毛片| 国产精品18久久久| 中文字幕一区精品| 日韩一区二区三区四区| 电影《抗日战争片》| 好大好硬好爽快点我要老师| 国产特黄特色a级在线视| 初尝了新婚小妇柔佳| 亚洲人成日本在线观看| 波多野结衣人妻上司部长| 蜜耻类似电影| 97国产影院| 欧美二级片| 中文字幕在线中文乱码怎么解决| 久久免费看| 洛蓝小说| 我和我的男人| 91人人妻人人澡人人爽人人sex | 黄色看片软件| 狠狠色噜噜狠狠狠| 久久超| 91精品人妻一区二区六十路| 亚洲日本高清成人aⅴ片| 老师穿着黑色丝袜啪啪的| 美女暴露无遮挡黄| yy6080私人啪啪| 午夜观看| 91丨PORNY丨蝌蚪熟女| 杨幂裸乳被爆?白浆的视频| Free性丰满69性欧美| 欧美一级黄碟| 精品一久久香蕉国产线看播放| 国产羞羞视频在线观看| 男男h文| 成人网18免费韩国| 南京巨根无套操到你窒息| 炮灰美人就该被疯批疼爱| 欧美黄色网址|