python學習之-socket(套接字)
什麼是套接字socket
socket把傳輸層以下的協議都封裝成了簡單的介面,我編寫基於網路通訊的軟體只需要呼叫這些介面即可,寫出的程式自然是遵循tcp/udp協議的....
什麼是網際網路
網際網路=物理連線介質+網際網路通訊協議
ip+port就可以標識全世界範圍內獨一無二的一個基於網路通訊的軟體
為何要用socket
目標: 編寫一個C/S架構的軟體
server端必須具備:
1. 服務端需要穩定執行,一直對外提供服務
2. 服務端必須繫結一個固定的地址(這個固定地址就是ip+port(埠))
3. 服務端要支援併發
基於檔案型別的套接字家族
套接字家族的名字:AF_UNIX
unix一切皆檔案,基於檔案的套接字呼叫的就是底層的檔案系統來取資料,兩個套接字程序執行在同一機器,可以通過訪問同一個檔案系統間接完成通訊
基於網路型別的套接字家族
套接字家族的名字:AF_INET
(還有AF_INET6被用於ipv6,還有一些其他的地址家族,不過,他們要麼是隻用於某個平臺,要麼就是已經被廢棄,或者是很少被使用,或者是根本沒有實現,所有地址家族中,AF_INET是使用最廣泛的一個,python支援很多種地址家族,但是由於我們只關心網路程式設計,所以大部分時候我麼只使用AF_INET)
網路基本知識看這個連結:http://www.cnblogs.com/linhaifeng/articles/5937962.html(一定要看而且要理解,是網路程式設計的基礎)
為何學習socket一定要先學習網際網路協議:
1.首先:本節課程的目標就是教會你如何基於socket程式設計,來開發一款自己的C/S架構軟體
2.其次:C/S架構的軟體(軟體屬於應用層)是基於網路進行通訊的
3.然後:網路的核心即一堆協議,協議即標準,你想開發一款基於網路通訊的軟體,就必須遵循這些標準。
4.最後:就讓我們從這些標準開始研究,開啟我們的socket程式設計之旅
到底什麼是套接字socket,見圖示
PS:可以看到在應用層和傳輸層的中間加了一個抽象層,Socket把傳輸層以下的全部封裝好了,在寫程式的時候只要呼叫Socket的介面收發資料,寫出來的程式自然就是遵循網際網路協議的