Python的socket模組及示例
socket 由一些物件組成,這些物件提供網路應用程式的跨平臺標準。
認識socket 模組
socket 又稱“套接字”,應用程式通常透過“套接字”向網路發出請求或應答網路請求,使主機間或一臺計算機上的程式間可以通訊。socket 模組提供了標準的網路介面,可以訪問底層作業系統socket 介面的全部方法。
Python 使用socket() 函式建立套接字。其語法格式如下:
socket.socket([family[, type[, protocol]]])
各個引數的含義如下:
(1 )family :套接字中的網路協議,包括AF_UNIX (UNIX 網域協議)和AF_INET (IPv4 網域協議,如TCP 與UDP )。
(2 )type :套接字型別,包括SOCK_STREAM (使用在TCP 中)、SOCK_DGRAM (使用在UDP 中)、SOCK_RAW (使用在IP 中)和SOCK_SEQPACKET (列表連線模式)。
(3 )protocol :只使用在family 等於AF_INET 或type 等於SOCK_RAW 的時候。protocol 是一個常數,用於辨識所使用的協議種類。預設值是0 ,表示適用於所有socket 型別。
每一個socket 物件都有下面的方法:
(1 )accep t() :接收一個新連線,並且返回兩個數值(conn 、address )。conn 是一個新的socket 物件,用於在該連線上傳輸資料;address 是此socket 使用的地址。
(2 )bind(address) :將socket 連線到address 地址,地址的格式為(hostname, port) 。
(3 )close() :關閉此socket 。
(4 )connect(address) :連線到一個遠端的socket ,其地址為address 。
(5 )makefile([mode [, bufsize]]) :建立一個與socket 有關的檔案物件,引數mode 和bufsize 與內建函式open() 相同。
(6 )getpeername() :返回socket 所連線的地址,地址的格式為(ipaddr, port) 。
(7 )getsockname() :返回socket 本身的地址,地址的格式為(ipaddr, port) 。
(8 )listen(backlog) :開啟連線監聽,引數backlog 為最大可等候的連線數目。
(9 )recv(bufsize [, flags]) :從socket 接收資料,返回值是字串資料。引數bufszie 表示最大的可接收資料量;引數flags 用來指定資料的相關資訊,預設值為0 。
(10 )recvfrom(bufsize [, flags]) :從socket 接收資料。返回值是成對的(string, address) ,其中,string 代表接收的字串資料,address 則是socket 傳輸資料的地址。引數bufszie 表示最大的可接收資料量;引數flags 用來指定資料的相關資訊,預設值為0 。
(11 )send(string [, flags]) :將資料以字串型別傳輸到socket 。引數flags 與recv() 方法相同。
(12 )sendto(string [, flags], address) :將資料傳輸到遠端的socket 。引數flags 與recv() 方法相同,引數address 是該socket 的地址。
(13 )shutdown(how) :關閉聯機的一端或兩端。若how 等於0 ,則關閉接收端;若how 等於1 ,則關閉傳輸端;若how 等於2 ,則同時關閉接收端與傳輸端。
建立socket 連線
下面使用socket 模組的socket 函式建立一個socket 物件。socket 物件可以透過呼叫其他函式設定一個socket 服務。透過呼叫 bind(hostname, port) 函式指定服務的埠(port ),然後呼叫socket 物件的accept 方法,該方法等待客戶端的連線並返回connection 物件,表示已連線到客戶端。
【例13.1 】建立伺服器端的socket 服務(原始碼\ch13\13.1.py )。
# 匯入 socket、sys 模組 import socket import sys # 建立 socket 物件 serversocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM) # 獲取本地主機名 host = socket.gethostname() port = 9999 # 繫結埠 serversocket.bind((host, port)) # 設定最大連線數,超過後排隊 serversocket.listen(5) while True: # 建立客戶端連線 clientsocket,addr = serversocket.accept() print("連線地址: %s" % str(addr)) msg='折花逢驛使,寄與隴頭人。江南無所有,聊贈一枝春。'+ "\r\n" clientsocket.send(msg.encode('utf-8')) clientsocket.close()
儲存並執行程式,即可在伺服器端啟動socket 服務。
下面的示例建立一個客戶端,並連線以上建立的服務,埠號為12345 。
【例13.2 】建立客戶端的連線(原始碼\ch13\13.2.py )。
# 匯入 socket、sys 模組 import socket import sys # 建立 socket 物件 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 獲取本地主機名 host = socket.gethostname() # 設定埠 port = 9999 # 連線服務,指定主機和埠 s.connect((host, port)) # 接收小於 1024 位元組的資料 msg = s.recv(1024) s.close() print (msg.decode('utf-8'))
儲存並執行程式,輸出結果如下:
折花逢驛使,寄與隴頭人。江南無所有,聊贈一枝春。
此時在伺服器端顯示的結果如下:
連線地址:('192.168.108',65141)
注意: 第一次執行13.1.py 和13.2.py 兩個檔案時,可能會彈出以下錯誤資訊:
ConnectionRefusedError: [WinError 10061] 由於目標計算機積極拒絕,無法連線。
解決方法是關閉上述執行的13.1.py 和13.2.py 兩個檔案,然後重新執行這兩個檔案即可。
本文節選自《 Python 程式設計從零開始學(影片教學版) 》,本次內容釋出,獲得作者和出版社授權。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18841117/viewspace-2950710/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python模組 adorner 的使用示例Python
- 每週一個 Python 模組 | socketPython
- 20個Python random模組的程式碼示例Pythonrandom
- socket模組函式函式
- [轉載] Python日曆模組| 使用示例的weekday()方法Python
- python之排序操作及heapq模組Python排序
- Python筆記之paramiko模組安裝和使用示例Python筆記
- Python的HTTP庫及示例PythonHTTP
- rust模組管理示例1Rust
- py模組匯入示例
- Python開發常用的庫及模組!Python學習教程Python
- python 模組:itsdangerous 模組Python
- Python模組:time模組Python
- python-包及日誌模組使用Python
- ??Java開發者的Python快速進修指南:自定義模組及常用模組JavaPython
- Python網路程式設計(socket模組、緩衝區、http協議)Python程式設計HTTP協議
- 聊天模組及分享模組分享
- Python模組之urllib模組Python
- python模組之collections模組Python
- python的logging模組Python
- python的os模組Python
- Python的shutil模組Python
- Python 模組Python
- [Python模組學習] glob模組Python
- python的os模組的常見函式及用途詳解Python函式
- python中的chardet模組Python
- Python中模組的使用Python
- Python中的abc模組Python
- Python logging模組的使用Python
- iOS應用模組化的思考及落地方案(一)模組的劃分及模組化工作流程iOS
- Python中模組是什麼?Python有哪些模組?Python
- python3中的re模組簡單介紹及使用Python
- Python Execl模組Python
- Python mongoHelper模組PythonGo
- Python——JSON 模組PythonJSON
- [Python] pipe模組Python
- Python - 模組包Python
- python——typing模組Python