python-tcp/ip網路程式設計認識(三)
本文作者:黎智煊,叩丁狼高階講師。原創文章,轉載請註明出處。
socket簡介
介紹
socket起源於Unix,而Unix/Linux基本哲學之一就是“一切皆檔案”,對於檔案用【開啟】【讀寫】【關閉】模式來操作。socket就是該模式的一個實現,socket即是一種特殊的檔案,一些socket函式就是對其進行的操作(讀/寫IO、開啟、關閉)
基本上,Socket 是任何一種計算機網路通訊中最基礎的內容。例如當你在瀏覽器位址列中輸入 http://www.wolfcode.cn 時,你會開啟一個套接字,然後連線到 http://www.wolfcode.cn
-
本地的程序間通訊(IPC)有很多種方式,例如
- 佇列
- 同步(互斥鎖、條件變數等)
以上通訊方式都是在一臺機器上不同程序之間的通訊方式,那麼問題來了
網路中程序之間如何通訊?
-
網路中程序之間如何通訊
首要解決的問題是如何唯一標識一個程序,否則通訊無從談起!
在本地可以通過
程序PID
來唯一標識一個程序,但是在網路中這是行不通的。
其實TCP/IP協議族已經幫我們解決了這個問題,網路層的“ip地址”可以唯一標識網路中的主機
“協議+埠”
可以唯一標識主機中的應用程式(程序)。
這樣利用ip地址,協議,埠就可以標識網路的程序了,網路中的程序通訊就可以利用這個標誌與其它程序進行互動
-
什麼是socket
socket(簡稱 套接字
) 是程序間通訊的一種方式,它與其他程序間通訊的一個主要不同是:
它能實現不同主機間的程序間通訊,我們網路上各種各樣的服務大多都是基於 Socket 來完成通訊的
- 例如我們每天瀏覽網頁、QQ 聊天、收發 email 等等
-
建立socket
在 Python 中 使用socket 模組的函式 socket 就可以完成:
socket.socket(AddressFamily, Type)
說明:
函式 socket.socket 建立一個 socket,返回該 socket 的描述符,該函式帶有兩個引數:
- Address Family:可以選擇 AF_INET(用於 Internet 程序間通訊) 或者 AF_UNIX(用於同一臺機器程序間通訊),實際工作中常用AF_INET
- Type:套接字型別,可以是 SOCK_STREAM(流式套接字,主要用於 TCP 協議)或者 SOCK_DGRAM(資料報套接字,主要用於 UDP 協議)
建立一個tcp socket(tcp套接字)
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket Created'
建立一個udp socket(udp套接字)(用例,到時候後面講到udp會詳細介紹)
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print 'Socket Created'
socket和file的區別:
-
file模組是針對某個指定檔案進行【開啟】【讀寫】【關閉】
-
socket模組是針對 伺服器端 和 客戶端Socket 進行【開啟】【讀寫】【關閉】
具體可以參考一下以下這個圖片:
叩丁狼教育.png
想獲取更多技術乾貨,請前往叩丁狼官網:http://www.wolfcode.cn/all_article.html