TCP/UDP的套接字Socket通信工作流程

套接字是一種通信機制,憑藉這種機制,客戶/服務器系統的開發工作既可以在本地單機上進行,也可以跨網絡進行,Linux所提供的功能(如打印服務,ftp等)通常都是通過套接字來進行通信的,套接字的創建和使用與管道是有區別的,因爲套接字明確地將客戶和服務器區分出來,套接字可以實現將多個客戶連接到一個服務器。

套接字,也稱爲BSD套接字,是支持TCP/IP的網絡通信的基本操作單元,可以看做是不同主機之間的進程進行雙向通信的端點,簡單的說就是通信的兩方的一種約定,用套接字中的相關函數來完成通信過程。應用層通過傳輸層進行數據通信時,TCP和UDP會遇到同時爲多個應用程序進程提供併發服務的問題。
簡單的舉例說明:Socket=Ip address+ TCP/UDP + port。

一.面向連接的套接字Socket通信工作流程

爲了實現服務器與客戶機的通信,服務器和客戶機都必須建立套接字。服務器與客戶機的工作原理可以用下面的過程來描述。
1.服務器先用 socket 函數來建立一個套接字,用這個套接字完成通信的監聽。
2.用 bind 函數來綁定一個端口號和 IP 地址。因爲本地計算機可能有多個網址和 IP,每一個 IP 和端口有多個端口。需要指定一個 IP 和端口進行監聽。
3.服務器調用 listen 函數,使服務器的這個端口和 IP 處於監聽狀態,等待客戶機的連接。
4.客戶機用 socket 函數建立一個套接字,設定遠程 IP 和端口。
5.客戶機調用 connect 函數連接遠程計算機指定的端口。
6.服務器用 accept 函數來接受遠程計算機的連接,建立起與客戶機之間的通信。
7.建立連接以後,客戶機用 write 函數向 socket 中寫入數據。也可以用 read 函數讀取服務器發送來的數據。
8.服務器用 read 函數讀取客戶機發送來的數據,也可以用 write 函數來發送數據。
9.完成通信以後,用 close 函數關閉 socket 連接。
這裏寫圖片描述
這裏寫圖片描述

二. 面向無連接的套接字Socket通信工作流程

無連接的通信不需要建立起客戶機與服務器之間的連接,因此在程序中沒有建立連接的過程。進行通信之前,需要建立網絡套接字。服務器需要綁定一個端口,在這個端口上監聽接收到的信息。客戶機需要設置遠程 IP 和端口,需要傳遞的信息需要發送到這個 IP 和端口上。
這裏寫圖片描述

參考(https://blog.csdn.net/u010297828/article/details/45740807?locationNum=10)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章