從零開始學習Python網路程式設計:探索TCP協定與實例示範!

2023.11.23

從零開始學習Python網路程式設計:探索TCP協定與實例示範!

在本文中,我們將探討TCP 協議,並透過一個簡單的例子來示範如何使用Python 編寫網路程式碼。

Python 是一種高階的程式語言,擁有廣泛的網頁程式庫。

這些函式庫允許Python 開發者能夠使用TCP 和其他網路協定進行通訊。

在本文中,我們將探討TCP 協議,並透過一個簡單的例子來示範如何使用Python 編寫網路程式碼。

TCP 協定簡介

TCP (Transmission Control Protocol) 協定是網際網路和許多其他網路的基本傳輸協定。

TCP 協定確保資料在網路上可靠地傳輸,其中包含了偵測遺失的資料包並請求重新傳送的機制,還可以處理資料包亂序到達和資料包遺失的問題。

因此,與其他協定(如UDP、ICMP 和IP)相比,TCP 是一種更可靠的協定。

TCP 協定是一種基於連線的協定,因此在資料傳輸之前,必須建立一個連線。

連接包括創建和維護一個虛擬的管道(稱為套接字或端點),透過這個管道可以傳輸資料。

在建立連線之後,資料可以透過管道在兩台電腦之間進行傳輸。

傳輸完成後,連線可以關閉以釋放被使用的資源並且終止網路連線。

TCP/IP 模型

TCP 協定是基於TCP/IP 套件協定棧的。

在這個協定堆疊中,每個層次都處理特定的任務並依賴下面的層次來完成。

TCP/IP 模型的主要層次是:

  • 應用層:這個層次是應用程式和網路協定之間的接口,包括FTP、HTTP 和Telnet 等應用程式協定。
  • 傳輸層:這個層次是所有資料傳輸的核心,協定包括TCP 和UDP。
  • 網路層:這個層次使用IP 協定進行封包路由。
  • 鏈結層:這個層次包括實體層和資料鏈結層,這兩個層次之間的任務是在實體網路連線上建立和維護資料鏈路連線。

建立TCP 連接

在Python 中建立TCP 連接,需要使用socket 函式庫。

socket 函式庫提供了各種套接字函數和常數,這些函數和常數使得Python 和網路之間的通訊變得更為簡單。

為了建立TCP 連接,需要執行以下步驟:

  • 創建一個套接字
  • 綁定套接字
  • 監聽套接字
  • 接受來自客戶端的連線請求

下面,我們將在Python 中執行這些步驟並建立一個簡單的伺服器來監聽來自客戶端的連線請求。

import socket

# 创建一个 TCP/IP 套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定套接字到特定的地址和端口
server_address = ('localhost', 8888)
print('Starting up on {} port {}'.format(*server_address))
server_socket.bind(server_address)

# 开始监听连接
server_socket.listen(1)

# 等待连接请求
print('Waiting for a connection...')
connection, client_address = server_socket.accept()
print('Connection from', client_address)

# 处理请求
while True:
    data = connection.recv(1024)
    print('Received {!r}'.format(data))
    if data:
        connection.sendall(data)
    else:
        break

# 关闭连接
connection.close()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

讓我們逐行解釋這個程序的工作原理:

  • 首先,我們導入socket 庫並建立了一個TCP/IP 套接字。socket.AF_INET 參數指定了該套接字將使用IPv4 密碼,socket.SOCK_STREAM 參數指定了這是一個流套接字。
  • 然後,我們使用bind() 函數將套接字綁定到特定的IP 位址和連接埠。在這裡,我們綁定了localhost 上的連接埠8888。
  • 接下來,我們監聽連線。在這個範例中,設定套接字最多允許等待1 個連線請求。
  • 最後,我們使用accept() 函數接受來自客戶端的連線請求。這個函數會一直等待,直到有一個客戶端連線。一旦連線被接受,accept() 函數會傳回一個新的套接字和客戶端的位址資訊。
  • 從這裡開始,我們可以處理客戶端的請求。在這個例子中,我們簡單地讀取客戶端發送的任何數據,然後將它們發送回客戶端。當客戶端發送空資料時,循環將終止並關閉連接代碼。

進行TCP 連接

要連接到Python 伺服器,我們需要使用另一個套接字來表示客戶端端點。

客戶端套接字需要與伺服器套接字使用相同的協定。

初始化的IP 位址和連接埠必須與伺服器使用的綁定位址和連接埠相同。

客戶端連線的步驟如下:

  • 創建一個套接字
  • 執行連線

下面,我們將在Python 中執行這些步驟並建立一個簡單的客戶端以連接我們先前建立的伺服器。

import socket

# 创建一个 TCP/IP 套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到服务器
server_address = ('localhost', 8888)
print('Connecting to {} port {}'.format(*server_address))
client_socket.connect(server_address)

# 发送数据
message = b'This is a test message'
client_socket.sendall(message)

# 接收数据
data = client_socket.recv(1024)
print('Received', repr(data))

# 关闭连接
client_socket.close()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

讓我們逐行解釋這個程序的工作原理:

  • 首先,我們匯入socket 庫並建立了一個與伺服器使用相同協定的TCP/IP 套接字。
  • 然後,我們使用connect() 函數連接到伺服器。connect() 函數需要指定連接的IP 位址和連接埠。
  • 一旦我們連接到伺服器,我們可以發送資料。在這個例子中,我們簡單地發送一條測試訊息。
  • 最後,我們等待接收伺服器發回的資料。一旦接收到數據,我們可以輸出它並關閉客戶端套接字。

結論

本文簡要介紹了TCP 協定及其在Python 程式中的使用。

使用socket 函式庫,可以建立套接字、綁定套接字、監聽套接字、接受客戶端連線並將資料傳送到和接收到其他電腦。

透過這些步驟,我們可以將程式連接到TCP 協定並啟動網路通訊。

當然,本文只是介紹TCP 協議的基本原理和應用,還有很多深入和複雜的知識需要學習和掌握。