從客戶端傳送和接收訊息的 Python 程式
Python socket 是一組用於套接字程式設計的模組,它使程序能夠透過 IP 網路進行通訊。Python 中的套接字為大多數網路程式設計任務提供了基礎。透過匯入相關的模組,我們可以編寫 Python 程式來建立客戶端和伺服器程式,以用於不同型別的網路應用程式,例如網頁抓取、檔案傳輸、電子郵件客戶端和聊天應用程式。
"socket" 模組是 Python 中套接字程式設計最重要的模組。它提供了不同型別的面向連線和無連線套接字,這些套接字實現了特定的協議級別,例如 TCP、UDP 等。
TCP (傳輸控制協議) 套接字
TCP (傳輸控制協議) 套接字用於需要可靠資料傳輸的通訊。它們遵循一組特定的資料傳輸規則,有助於確保成功地將傳送的訊息傳遞給目標接收方。這些型別的套接字更適合流媒體服務,例如視訊通話、線上遊戲、檔案共享等。
UDP (使用者資料報協議) 套接字
UDP (使用者資料報協議) 套接字用於不需要可靠資料傳輸的通訊。這些套接字透過以全速傳送資料包來實現快速資料傳輸,而無需擔心接收方是否收到它們。這可以防止資料重傳並減少網路擁塞。使用 UDP 套接字的此類應用程式示例包括影片流、VoIP 和線上遊戲。
以下是啟動伺服器和客戶端之間通訊的步驟。
匯入 Socket 模組
首先,我們必須在 Python 環境中匯入 socket 模組,如下所示。
import socket
建立套接字
現在,我們必須使用 socket.socket() 函式建立套接字,程式碼如下所示。在程式碼中,第一個引數 socket.AF_INET 指定地址族 (IPv4),第二個引數 socket.SOCK_STREAM 表示它是一個 TCP 套接字。我們也可以使用 socket.SOCK_DGRAM 用於 UDP 套接字。
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
繫結套接字
在此步驟中,我們指定套接字偵聽傳入連線的地址和埠。例如,如果套接字繫結到本地主機地址 ('localhost') 和埠 5000,則程式碼如下所示。
server_address = ('localhost', 5000)
sock.bind(server_address)
偵聽連線
套接字方法的 listen() 函式將套接字設定為偵聽模式,允許它接受傳入連線,併為 listen() 函式分配引數 1,指定可以排隊以接受的最大掛起連線數。
sock.listen(1)
接受連線
accept() 函式阻塞,直到客戶端連線到套接字。它返回一個新的套接字物件,表示連線和客戶端的地址。然後,我們可以在單獨的執行緒或程序中處理連線。
while True: connection, client_address = sock.accept()
傳送和接收資料
建立連線後,我們可以使用套接字物件傳送和接收資料。recv() 函式從套接字讀取資料,sendall() 函式將資料傳送到客戶端。資料通常以位元組的形式傳輸,因此在字串前加上 b 以指示 位元組文字 是一種常見的做法。
data = connection.recv(1024) connection.sendall(b'Hello, client!')
關閉連線
完成與客戶端的通訊後,我們可以透過在套接字物件上呼叫 close() 方法來關閉連線。
connection.close()
關閉伺服器套接字
最後,當不再需要伺服器套接字時,可以使用 close() 方法將其關閉。
sock.close()
示例
以下是完整的示例 -
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost', 5000)
sock.bind(server_address)
sock.listen(1)
while True:
connection, client_address = sock.accept()
data = connection.recv(1024)
connection.sendall(b'Hello, client!')
connection.close()
sock.close()
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP