2018-10-25

Socket網(wǎng)絡(luò)通信

socket是應(yīng)用層與TCP/IP協(xié)議通信的中間軟件的抽象層,它是一組接口诫硕。

網(wǎng)絡(luò)中進(jìn)程通信:利用三元組(ip地址,協(xié)議越驻,端口)標(biāo)識(shí)叽掘;其中楣铁,ip地址作用于網(wǎng)絡(luò)層,協(xié)議和端口作用在傳輸層更扁。

  • Socket函數(shù)
int Socket(int domain, int type, int protocol);

Socket()用于創(chuàng)建一個(gè)socket描述符盖腕,它唯一標(biāo)識(shí)一個(gè)socket.

  • domain:
    即協(xié)議域,又稱為協(xié)議族(family)浓镜,協(xié)議族決定了socket的地址類型赊堪,在通信中必須采用對(duì)應(yīng)的地址;
  • type
    指定socket類型竖哩;
  • protocol:
    指定協(xié)議。
    type和protocol不可以隨意組合脊僚,當(dāng)protocol為0時(shí)相叁,會(huì)自動(dòng)選擇type類型對(duì)應(yīng)的默認(rèn)協(xié)議。
  • bind()函數(shù)
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • sockfd:
    即socket描述字辽幌,通過socket()函數(shù)創(chuàng)建的增淹,唯一標(biāo)識(shí)一個(gè)socket, bind()就是將這個(gè)描述字綁定一個(gè)名字;
  • addr:
    一個(gè)const struct sockaddr* 指針乌企,指向要綁定給sockfd的協(xié)議地址虑润。這個(gè)地址結(jié)構(gòu)根據(jù)地址創(chuàng)建socket時(shí)的地址協(xié)議族的不同而不同;
  • addrlen:
    對(duì)應(yīng)的時(shí)地址的長(zhǎng)度加酵。
  • listen(), connect()函數(shù)
    如果作為一個(gè)服務(wù)器拳喻,在調(diào)用socket(), bind()之后就會(huì)調(diào)用listen()來監(jiān)聽這個(gè)socket,如果客戶端這是調(diào)用connect()發(fā)出連接請(qǐng)求猪腕,服務(wù)器端就會(huì)接收到這個(gè)請(qǐng)求冗澈。
int listen(int sockfd, int backlog);//sockfd:要監(jiān)聽的socket描述字; backlog:相應(yīng)socket可以排隊(duì)的最大連接個(gè)數(shù)陋葡。
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);//sockfd:客戶端socket描述字亚亲;  addr:服務(wù)器socket地址;   addrlen:socket地址長(zhǎng)度腐缤。
socket()函數(shù)創(chuàng)建的sockey默認(rèn)為一個(gè)主動(dòng)類型捌归,listen函數(shù)將socket變?yōu)楸粍?dòng)類型的,等待客戶的連接請(qǐng)求岭粤;
客戶端通過調(diào)用connect函數(shù)來建立與TCP服務(wù)器的連接惜索。
  • accept()函數(shù)
    TCP的服務(wù)器一次調(diào)用socket(),bind(),listen()之后,就會(huì)監(jiān)聽指定的socket地址了绍在。TCP客戶端一次調(diào)用socket()门扇、connect()之后就向TCP服務(wù)器發(fā)送一個(gè)連接請(qǐng)求雹有。TCP服務(wù)器監(jiān)聽到這個(gè)請(qǐng)求之后,就會(huì)調(diào)用accept()函數(shù)來接受請(qǐng)求臼寄,這樣連接就建立好了霸奕。之后就可以開始網(wǎng)絡(luò)I/O操作了。
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); //sockfd:服務(wù)器socket描述字吉拳;   addr:用于返回客戶端的協(xié)議地址质帅;  addrlen:協(xié)議地址的長(zhǎng)度。

如果accept成功留攒,那么其返回值是由內(nèi)核自動(dòng)生成的一個(gè)全新的描述字煤惩,代表與返回客戶的TCP連接。
accept第一個(gè)參數(shù)為服務(wù)器的socket描述符炼邀,是服務(wù)器開始調(diào)用socket()函數(shù)生成的魄揉,稱為監(jiān)聽socket描述字,而accept函數(shù)返回的是連接的socket描述字拭宁。

  • read()洛退、write()等函數(shù)
  • send()、recv()等函數(shù)杰标,有···更好的發(fā)送接收函數(shù)···
  • close()函數(shù)兵怯;
  • socket握手 連接 釋放連接
    socket中TCP的三次握手|建立連接:客戶端的connect在三次握手的第二次返回,而服務(wù)器的accept在三次握手的第三次返回腔剂;
    socket的TCP的四次握手|釋放連接媒区。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市掸犬,隨后出現(xiàn)的幾起案子袜漩,更是在濱河造成了極大的恐慌,老刑警劉巖湾碎,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件噪服,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡胜茧,警方通過查閱死者的電腦和手機(jī)粘优,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呻顽,“玉大人雹顺,你說我怎么就攤上這事±缺椋” “怎么了嬉愧?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)喉前。 經(jīng)常有香客問我没酣,道長(zhǎng)王财,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任裕便,我火速辦了婚禮绒净,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘偿衰。我一直安慰自己挂疆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布下翎。 她就那樣靜靜地躺著缤言,像睡著了一般。 火紅的嫁衣襯著肌膚如雪视事。 梳的紋絲不亂的頭發(fā)上胆萧,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音俐东,去河邊找鬼鸳碧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛犬性,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腾仅,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼乒裆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了推励?” 一聲冷哼從身側(cè)響起鹤耍,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎验辞,沒想到半個(gè)月后稿黄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡跌造,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年杆怕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壳贪。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡陵珍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出违施,到底是詐尸還是另有隱情互纯,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布磕蒲,位于F島的核電站留潦,受9級(jí)特大地震影響只盹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兔院,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一殖卑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧秆乳,春花似錦懦鼠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至扯键,卻和暖如春睦袖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荣刑。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國打工馅笙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人厉亏。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓董习,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親爱只。 傳聞我的和親對(duì)象是個(gè)殘疾皇子皿淋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354