從客戶端傳送和接收訊息的 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()

更新時間: 2023年8月2日

瀏覽量:118

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.