tcp協議特性:面向連線,可靠傳輸,面向位元組流。
服務端:
建立套接字
在核心中建立socket結構體與網絡卡建立聯絡,描述協議版本,傳輸型別,協議型別。
為套接字繫結位址資訊
給socket描述源端位址資訊。
開始監聽
告訴作業系統可以開始接收客戶端的連線請求(客戶端與服務端進行tcp通訊必須首先建立
連線,確保雙方都具有資料收發的能力).
當服務端收到了客戶端的連線請求,連線的建立過程都是在核心中完成的。
tcp服務端最早的套接字只用於接收新連線請求,連線請求到來之後建立新的套接字建立的
新的套接字用於和客戶端後續的通訊。(監聽套接字 / 通訊套接字)
服務端程式獲取新建立的socket套接字操作控制代碼
服務端程式在核心中接收到新的連線,會建立新的socket。服務端程式獲取核心中新建立
的socket操作控制代碼,在服務端程式這邊通過這個獲取的新建的操作控制代碼和客戶端進行通訊。
服務端通過新建套接字可以與客戶端進行資料通訊
tcp在資料通訊的時候,誰先傳送都可以(因為這時候連線已經建立)
傳送資料:將資料拷貝到核心socket的傳送緩衝區。
接收資料:從核心socket的接收緩衝區中取出資料。
關閉套接字:釋放套接字
客戶端:
建立套接字
向服務端傳送連線請求
收 / 發資料
關閉套接字
服務端是否開始接收客戶端請求,取決於套接字是否開始監聽。最早的套接字就像是飯店中的門迎
永遠只迎接新顧客,即最早的套接字永遠只接收新連線請求,然後為這個新客戶端連線建立新的服
務端套接字進行通訊,新建的服務端套接字專門用於這乙個客戶端通訊。
socket進行tcp通訊的介面
//建立套接字
intsocket
(int domain,
int type,
int protocol)
domain: 位址域 af_inet -> ipv4
type: 套接字型別 sock_stream 用於tcp通訊 sock_gram 用於udp通訊
protocol:協議型別 ipproto_tcp
返回值:乙個socket操作控制代碼
//繫結位址資訊
intbind
(int sockfd, sockaddr* addr, socklen_t len)
//開始監聽
intlisten
(int sockfd,
int backlog)
sockfd: socket操作控制代碼
backlog: 核心中tcp連線pending佇列的最大節點數,
決定了同一時刻服務端所能接收的客戶端請求數量。
//服務端程式獲取新建立的socket操作控制代碼
intaccept
(int sockfd,
struct sockaddr* addr, socklen_t len)
;sockfd: 指定獲取哪個服務端socket對於新連線所建立的新套接字socket.
(監聽套接字)
addr: 客戶端位址資訊
len: 輸入輸出型引數,指定想要獲取的位址長度,以及獲取實際得到的位址首席資訊官度。
返回值:正確返回具體新建立套接字的操作控制代碼,用於後續與指定客戶端通訊,失敗返回-
1//這是乙個阻塞函式,若沒有新連線到來則一直等待
//收 / 發資料
intrecv
(int sockfd,
char
* buf,
int len,
int flag)
;int
send
(int sockfd,
char
* data,
int len,
int flag)
;sockfd:對於服務端來說就是accept返回的新建立的套接字描述符。
Linux socket 檔案系統套接字
套接字 socket 什麼是套接字 套接字是一種通訊機制 通過套接字,可實現本機內的通訊 也可以實現跨網路的通訊。使用套接字實現本地通訊 本機內的伺服器和客戶端 例項 server1.c client1.c 檔案系統套接字伺服器客戶端開發步驟 檔案系統套接字,用於本機內通訊 1 伺服器端 1 刪除以...
Linux Socket套接字描述符詳解
套接字又名socket,是乙個介面,程序可以利用該介面和其他程序通訊。無論是其他程序在本機上還是在其他機器上。套接字介面有許多不同的網路協議。包括tcp ip協議棧!就如使用檔案描述符來訪問檔案一樣。程式是用套接字描述符來訪問套接字。include int socket int domain,int...
監聽套接字 連線套接字
摘要 對於伺服器程式設計中最重要的一步等待並接受客戶的連線,那麼這一步在程式設計中如何完成,accept函式就是完成這一步的。它從核心中取出已經建立的客戶連線,然後把這個已經建立的連線返回給使用者程式,此時使用者程式就可以與自己的客戶進行點到點的通訊了。accept函式等待並接受客戶請求 inclu...