【socket編程】什么是socket編程


Socket簡介

Socket是進程通訊的一種方式,即調用這個網絡庫的一些API函數實現分布在不同主機的相關進程之間的數據交換。

幾個定義:

(1)IP地址:即依照TCP/IP協議分配給本地主機的網絡地址,兩個進程要通訊,任一進程首先要知道通訊對方的位置,即對方的IP。

(2)端口號:用來辨別本地通訊進程,一個本地的進程在通訊時均會占用一個端口號,不同的進程端口號不同,因此在通訊前必須要分配一個沒有被訪問的端口號。

(3)連接:指兩個進程間的通訊鏈路。

(4)半相關:網絡中用一個三元組可以在全局唯一標志一個進程:

(協議,本地地址,本地端口號)

這樣一個三元組,叫做一個半相關,它指定連接的每半部分。

(4)全相關:一個完整的網間進程通信需要由兩個進程組成,並且只能使用同一種高層協議。也就是說,不可能通信的一端用TCP協議,而另一端用UDP協議。因此一個完整的網間通信需要一個五元組來標識:

(協議,本地地址,本地端口號,遠地地址,遠地端口號)

這樣一個五元組,叫做一個相關(association),即兩個協議相同的半相關才能組合成一個合適的相關,或完全指定組成一連接。

 

 

作者:郭無心
鏈接:https://www.zhihu.com/question/29637351/answer/67610424
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

二、客戶/服務器模式

在TCP/IP網絡應用中,通信的兩個進程間相互作用的主要模式是客戶/服務器(Client/Server,
C/S)模式,即客戶向服務器發出服務請求,服務器接收到請求后,提供相應的服務。客戶/服務器模式的建立基於以下兩點:

(1)首先,建立網絡的起因是網絡中軟硬件資源、運算能力和信息不均等,需要共享,從而造就擁有眾多資源的主機提供服務,資源較少的客戶請求服務這一非對等作用。

(2)其次,網間進程通信完全是異步的,相互通信的進程間既不存在父子關系,又不共享內存緩沖區,因此需要一種機制為希望通信的進程間建立聯系,為二者的數據交換提供同步,這就是基於客戶/服務器模式的TCP/IP。

服務器端:

其過程是首先服務器方要先啟動,並根據請求提供相應服務:

(1)打開一通信通道並告知本地主機,它願意在某一公認地址上的某端口(如FTP的端口可能為21)接收客戶請求;

(2)等待客戶請求到達該端口;

(3)接收到客戶端的服務請求時,處理該請求並發送應答信號。接收到並發服務請求,要激活一新進程來處理這個客戶請求(如UNIX系統中用fork、exec)。新進程處理此客戶請求,並不需要對其它請求作出應答。服務完成后,關閉此新進程與客戶的通信鏈路,並終止。

(4)返回第(2)步,等待另一客戶請求。

(5)關閉服務器

客戶端:

(1)打開一通信通道,並連接到服務器所在主機的特定端口;

(2)向服務器發服務請求報文,等待並接收應答;繼續提出請求......

(3)請求結束后關閉通信通道並終止。

從上面所描述過程可知:

(1)客戶與服務器進程的作用是非對稱的,因此代碼不同。

(2)服務器進程一般是先啟動的。只要系統運行,該服務進程一直存在,直到正常或強迫終止。



作者:郭無心
鏈接:https://www.zhihu.com/question/29637351/answer/67610424
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM