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

當前位置:首頁 > > 夜夜生code


前言

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

目前,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;  /* 這里僅僅用作占位符,不做實際用處  */ unsigned char sin_zero[8]; };

IPv6 套接字地址格式

struct sockaddr_in6 { sa_family_t sin6_family; /* 地址族.  16-bit*/ in_port_t sin6_port;  /* 傳輸端口號 # 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)绻胍獙烧哌M行抽象統(tǒng)一,就必須要構(gòu)造一個通用套接字地址格式。有了統(tǒng)一可以操作的地址結(jié)構(gòu),那么就可以設計一套統(tǒng)一的接口。結(jié)合強制類型轉(zhuǎn)換,也能預防內(nèi)存泄露。

對于地址族,有非常多類型,這里只列舉常見的幾種:

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

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

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

注意:有時候AF_XXX也會被寫成PF_XXX,這兩個實際是同一個宏。

sin_port表示端口號,用來區(qū)分主機中進程 sin_addr表示ip地址,用來表示本機在網(wǎng)絡中的編號

總結(jié)

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


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