www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > > 夜夜生code


前言

socket套接字也叫伯克利套接字,是加州大學(xué)伯克利分校的研究人員在 20 世紀(jì) 80 年代早期提出的。BSD作為unix系統(tǒng)的一大分支,最早在BSD 4.2 Unix 內(nèi)核上實(shí)現(xiàn)了 socket。因?yàn)樗蟯nix系統(tǒng)一切皆文件的哲學(xué)理念,方便易用,于是很快就推廣開(kāi)來(lái)使用了。

目前,Linux系統(tǒng)和window系統(tǒng)都已經(jīng)成熟支持socket套接字。

套接字地址格式

通用套接字地址格式

struct sockaddr{ sa_family_t sa_family;  /* 地址族.  16-bit*/ char sa_data[14];   /* 具體的地址值 112-bit */ };

IPv4 套接字格式地址

struct sockaddr_in { sa_family_t sin_family; /* 地址族.  16-bit*/ in_port_t sin_port;     /* 端口口  16-bit*/ struct in_addr sin_addr;  /* 這里僅僅用作占位符,不做實(shí)際用處  */ unsigned char sin_zero[8]; };

IPv6 套接字地址格式

struct sockaddr_in6 { sa_family_t sin6_family; /* 地址族.  16-bit*/ in_port_t sin6_port;  /* 傳輸端口號(hào) # 16-bit */ uint32_t sin6_flowinfo; /* IPv6流控信息 32-bit*/ struct in6_addr sin6_addr;  /* IPv6地址128-bit */ uint32_t sin6_scope_id; /* IPv6域ID 32-bit */ };

從上面我們可以看到,IPv4和IPv6的套接字地址格式是不一樣的,因此我們?nèi)绻胍獙?duì)兩者進(jìn)行抽象統(tǒng)一,就必須要構(gòu)造一個(gè)通用套接字地址格式。有了統(tǒng)一可以操作的地址結(jié)構(gòu),那么就可以設(shè)計(jì)一套統(tǒng)一的接口。結(jié)合強(qiáng)制類(lèi)型轉(zhuǎn)換,也能預(yù)防內(nèi)存泄露。

對(duì)于地址族,有非常多類(lèi)型,這里只列舉常見(jiàn)的幾種:

  • AF_LOCAL:表示本地通信,很多人對(duì)網(wǎng)絡(luò)通信存在誤解,以為socket接口只能用在不同主機(jī)間通信,實(shí)際上它也可以用于本機(jī)進(jìn)程間通信的。很多情況下,也可以寫(xiě)成AF_UNIX、AF_FILE

  • AF_INET:因特網(wǎng)使用的IPv4地址

  • AF_INET6:因特網(wǎng)使用的IPv6地址

注意:有時(shí)候AF_XXX也會(huì)被寫(xiě)成PF_XXX,這兩個(gè)實(shí)際是同一個(gè)宏。

sin_port表示端口號(hào),用來(lái)區(qū)分主機(jī)中進(jìn)程 sin_addr表示ip地址,用來(lái)表示本機(jī)在網(wǎng)絡(luò)中的編號(hào)

總結(jié)

文章重點(diǎn)介紹了不同類(lèi)型套接字地址之間的一些區(qū)別,并對(duì)它們存在的這些區(qū)別的原因進(jìn)行了講解,再結(jié)合下面這一幅圖,就能很清晰地掌握不同類(lèi)型的套接字地址了,如下圖:


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉