OC中Socket使用/對(duì)應(yīng)三次握手,四次握手的理解

一. 起源:Socket起源于Unix,繼承了open->write/read->close基本哲學(xué);
二. Socket是一種特殊文件,Socket函數(shù)就是對(duì)這個(gè)文件進(jìn)行open->write/read->close操作;

//OC中使用函數(shù)的過程:socket->connect->send->recv->close

三. Socket函數(shù)(操作):{
1. 打開操作:int socket(int domain, int type,int protocol):{
a. 作用:創(chuàng)建一個(gè)socket,用來進(jìn)行讀寫操作;
b. 參數(shù)1:domain協(xié)議域:AF_INET(IPV4網(wǎng)絡(luò)開發(fā));
c. 參數(shù)2:type類型:SOCK_STREAM(TCP)/SOCK_DGRAM(UDP,報(bào)文);
d. 參數(shù)3:protocol:協(xié)議;
e. 返回值:>0的時(shí)候代表成功;}
2. 監(jiān)聽操作:"服務(wù)器端"bind()+listen()
3. 連接操作:"客戶端"int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen):{
a. 作用:連接服務(wù)器;
b. 參數(shù)1:要操作的socket;
c. 參數(shù)2:一個(gè)結(jié)構(gòu)體,包括'協(xié)議簇'/'端口號(hào)'/'IP地址'(網(wǎng)絡(luò)通信三要素);
d. 參數(shù)3:結(jié)構(gòu)體數(shù)據(jù)長度(可寫sizeof(addr))
e. 返回值:0成功/非零:錯(cuò)誤編號(hào)}
//客戶端發(fā)送connect()后,服務(wù)器會(huì)使用accept()函數(shù)進(jìn)行接受請(qǐng)求;
4. 請(qǐng)求操作:send(){
a. 作用:向服務(wù)器發(fā)送請(qǐng)求;
b. 參數(shù)1:要操作的socket;
c. 參數(shù)2:發(fā)送的請(qǐng)求信息;
d. 參數(shù)3:發(fā)送內(nèi)容長度;
e. 參數(shù)4:發(fā)送方式標(biāo)志;
f. 返回值:成功:返回發(fā)送的長度/失敗:SOCKET_ERROR}
5. 接受響應(yīng):recv(){
a. 作用:接受服務(wù)器發(fā)送過來的數(shù)據(jù);
b. 參數(shù)1:客戶端socket
c. 參數(shù)2:接收內(nèi)容緩沖區(qū)地址
d. 參數(shù)3:接收內(nèi)容緩存區(qū)長度
e. 參數(shù)4:接收方式0表示阻塞必須等待服務(wù)器返回?cái)?shù)據(jù)
f. 返回值:成功:返回讀入的字節(jié)數(shù)/失敗:返回SOCKET_ERROR}
6. 關(guān)閉操作:close()關(guān)閉指定的socket;
}

四.對(duì)應(yīng)的三次握手函數(shù):{
1. 客戶端:socket()創(chuàng)建->connect(阻塞)建立連接->發(fā)送syn = j包;
2. 服務(wù)器:socket()創(chuàng)建->Bind()給客戶端socket賦值->listen()監(jiān)聽->Accpet(阻塞),接受請(qǐng)求->發(fā)送syn = K,ACK = J+1;
3. 客戶端:connect(返回)->發(fā)送ACK = K+1包;
4. 服務(wù)器:Accpet(返回),連接建立,可以開始通信;
客戶端:嘿.客戶端.我建了個(gè)socket要連接,這是syn = k,能連的話你回復(fù)個(gè)ack唄;
服務(wù)器:哦.那我也建一個(gè)socket,這是還你的ack = k+1,給你個(gè)syn = j,收到了回我一個(gè)ack哈;
客戶端:好噠,收到了了,給你ack = j + 1;
客戶端:么么噠可以開始連接了
}

五.對(duì)應(yīng)四次握手函數(shù):{
1. 客戶端:Close()主動(dòng)關(guān)閉->發(fā)送FIN = M包;
2. 服務(wù)器:Read()返回零,被動(dòng)關(guān)閉->發(fā)送ACK = M+1包;
3. 服務(wù)器:Close()主動(dòng)關(guān)閉->發(fā)送FIN = N包;
4. 客戶端:發(fā)送:ACK = N + 1包;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、網(wǎng)絡(luò)中進(jìn)程之間如何通信? 2、Socket是什么? 3、socket的基本操作 3.1、socket()函數(shù) ...
    一字碼閱讀 746評(píng)論 0 8
  • 原文地址:http://www.cnblogs.com/skynet/archive/2010/12/12/190...
    archyly閱讀 1,120評(píng)論 0 8
  • 什么是TCP/IP、UDP? TCP/IP(Transmission Control Protocol/Inter...
    liuboxx1閱讀 1,053評(píng)論 0 1
  • 大綱 一.Socket簡介 二.BSD Socket編程準(zhǔn)備 1.地址 2.端口 3.網(wǎng)絡(luò)字節(jié)序 4.半相關(guān)與全相...
    VD2012閱讀 2,691評(píng)論 0 5
  • 早上7點(diǎn)30起床,吃完早餐去建材市場去拜訪恩施冠珠代理商張總。張總很真誠,給我分享了他做為老冠珠人的經(jīng)驗(yàn)。講到了和...
    31c47a10aded閱讀 267評(píng)論 0 0

友情鏈接更多精彩內(nèi)容