日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux的基础知识——网络字节序转化,ip地址转换函数,sockaddr数据结构

發布時間:2024/7/19 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux的基础知识——网络字节序转化,ip地址转换函数,sockaddr数据结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.網絡字節序

TCP/IP協議規定,網絡數據流采用大端字節序,即低地址高字節。為了使網絡程序具有可移植性,使得同樣的C代碼在大端和小端計算機上編譯后都能正常運行,可以調用以下庫函數做網絡字節序和主機字節序的轉換。

#include<arpa/inet.h>uint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort); uint32_t ntohl(uint32_t netlong); uint16_t ntohs(uint16_t netshort); h:host;n:network;l:32位長整數;s:16位短整數

如果主機是小端字節序,這些函數將參數做相應的大小端轉換然后返回,如果主機是大端字節序,這些函數不做轉換,將參數原封不動的返回。

2.IP地址轉換函數

2.1 將IP地址轉換為網絡字節序
#include<arpa/inet.h> int inet_pton(int af,const char *src,void *dst);

功能:將IPv4地址轉換為網絡字節序
參數:af:AF_INET或者AF_INET6,前一個是個IPv4地址,后一個適合IPv6地址;src:點分十進制的字符串;dst:寫進網絡字節序

2.2 將網絡字節序轉換為IP地址
#include<arpa/inet.h> int inet_ntop(int af,const void *src,char *dst,socklen_t size);

功能: 將網絡字節序轉換為IP地址
參數::af:AF_INET或者AF_INET6,前一個是個IPv4地址,后一個適合IPv6地址;src:網絡字節序;dst:返回字符串的指針的地址;size:字符串的大小

3.sockaddr數據結構

struct sockaddr很多網絡編程函數誕生于IPv4協議之前,那時候都是使用struct sockaddr結構體,但是這個結構體逐漸被廢棄,原struct sockaddr演變成struct sockaddr_in和struct sockaddr_in6,但是很多函數內部仍然需要傳遞struct sockaddr的地址,所以我們需要強制轉換所需的地址類型。

struct sockaddr_in {sa_family_t sin_family; /* address family: AF_INET */in_port_t sin_port; /* port in network byte order */struct in_addr sin_addr; /* internet address */};struct in_addr {uint32_t s_addr; /* address in network byte order */};

參數:sin_family::AF_INET或者AF_INET6;sin_port:端口號;sin_addr:IP地址

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的linux的基础知识——网络字节序转化,ip地址转换函数,sockaddr数据结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。