一、Socket
1.1
Socket()
創建一個Socket
主要用於創建客戶端的連接,客戶端創建的時候會創建一個無連接、無綁定的空狀態Socket
1.2
bind()
綁定一個Socket到一個本地地址和端口上
1.3
connect()
連接到遠程套接字
1.4
write()
把數據寫入到Socket輸出流
1.5
read()
從Socket輸入流讀取數據
二、ServerSocket
2.1
ServerSocket()
創建一個服務端的socket
2.2
bind()
綁定一個ServerSocket
2.3
accept()
接收一個新的連接
此時服務端會進入到一個阻塞狀態,直到有客戶端到達爲止。當然也可以設置阻塞的超時時間,默認的超時時間都是無限長
。當有一個客戶端到達,纔會進行後續的Socket的創建。
服務端的一個簡單流程就是,一個ServerSocket綁定到自己的端口之後,通過accept()會進入到accept狀態。如果此時有新的客戶端到達,那麼客戶端會創建一個對應的、相匹配的Socket,進入到後續的發送和接收的流程。當然,也可以選擇是否繼續accept下一個套接字,也可以直接關閉,不進行後續的套接字的等待。
2.4
write()
把數據寫入到Socket輸出流
2.5
read()
從Socket輸入流讀取數據
三、客戶端創建流程
四、服務端創建流程
五、Socket與進程之間的關係
默認的,每一個進程都可以創建一個Socket,甚至一個進程可以創建多個Socket連接。
那麼,可以藉助Socket完成進程與進程之間數據的傳輸。
如果A進程和B進程需要交互數據,那麼可以通過Socket連接建立數據傳輸。A進程將數據丟給TCP後,TCP內部的buffer和數據並不是由自己的進程所維護的,它是由操作系統維護的。操作系統在傳輸到下一個進程之後,另一個B進程的TCP的buffer和TCP底層的一些數據也是由操作系統維護的。TCP在得到信息之後,會把信息拋給上層,也就是B進程的process。
進程之間的交互不僅僅指自己電腦的進程與進程之間,也可以是自己電腦的進程和別人電腦的進程之間進行交互。
它們具體的交互就要通過Intnet網絡進行交互。