树莓派开发日记:基于python实现树莓派与主机的TCP通讯

博文介绍在局域网内让树莓派作为 TCP 服务端、主机作为客户端的 Python socket 示例:含联网与查 IP 的前置说明,以及 bind/listen/accept 与 connect 收发循环与完整示例代码。


前言

当今物联网技术迅速发展,树莓派作为一款功能强大且价格亲民的单板计算机,已广泛应用于各种智能硬件项目。为了实现树莓派与其他设备之间的通信,TCP协议作为一种常用的网络通信协议,成为了很多开发者的首选。在这篇博客中,我们将探讨如何通过Python语言在树莓派上实现TCP网络通信。


一、准备

能查询到这篇文章的朋友相比对树莓派已经不陌生了,那我们直接从TCP通讯开始讲起,但在此之前我们需要对树莓派进行一些简单的配置

1、增添WiFi 模块

可以参考这篇文档 树莓派增添WiFi 模块(nmcli)连接操作

2、在树莓派上配置Python环境

可以参考这篇文档 树莓派如何安装 Python 环境

3、查看主机与树莓派的IP地址(在同一个局域网内)

树莓派

在终端输入以下命令

hostname -I

或将鼠标放在wifi图标上既可看见

主机

一、通过命令提示符查看
按下 Win + R 键打开运行对话框,输入 cmd,然后按 Enter 键或点击“确定”以打开命令提示符。在命令提示符窗口中,输入 ipconfig 命令,然后按 Enter 键。

二、通过网络连接控制面板
1、在键盘上,同时按下Windows+R键。
2、复制并粘贴上ncpa.cpl,按回车键。
在这里插入图片描述
3、则双击以太网/Wi-Fi连接
4、点击“详情信息”按钮。
5、“IPv4地址”那一行对应的就是通常使用的IP地址

4、远程桌面连接树莓派操作(非必要)

可以参考这篇文档 使用VNC-viewer对树莓派5 远程连接桌面

二、TCP通讯简介

TCP(传输控制协议)是一种面向连接的、可靠的通信协议,它用于在计算机网络中传输数据。TCP协议通过在发送端和接收端之间建立连接,确保数据的正确、按序传输。当数据被发送时,TCP会将数据分割成多个小包并加上序号,同时接收端会确认接收到的数据包,确保没有丢失或错误。如果发现丢失的包,TCP会请求重新传输,直到所有数据都完整且准确地到达接收端。其基于客户端和服务器的模型进行。在这种模型中,客户端是发起连接的设备,它请求与服务器建立通信并向其发送数据。服务器是提供服务的设备,它等待客户端的连接请求,一旦建立连接,服务器就开始接收客户端发来的数据,并进行处理后返回响应。
TCP通讯示意图片
在本次TCP通讯中,考虑到项目需求,将树莓派作为服务器端,主机作为客户端进行通讯。

三、具体步骤

1、服务端

创造socket实例对象

import socket
socket_server = socket.socket()

绑定本地的IP地址

socket_server.bind(("172.20.10.6", 8989))
#注意这边的IP地址应该是服务器(也就是树莓派)的IP地址

设置监听的最大连接数为100

socket_server.listen(100)

阻塞等待连接

while True:
	client_socket, client_address = socket_server.accept()

服务器端与客户端交互流程

	while True:
    	data = client_socket.recv(1024).decode("UTF-8")
    	print(f"服务端收到数据 : {data}")
    	client_socket.send(f"服务端收到如下: {data}".encode())
    	print(f"向客户端发送: {data}")
    	if data == '0':
            break

关闭连接

	client_socket.close()
	print(f'客户端断开连接 {client_address}')

完整代码

import socket
socket_server = socket.socket()   # 创建socket实例对象
socket_server.bind(("172.20.10.6", 8989))  # 实例对象绑定服务端的 IP 地址和端口号(此处是服务器IP地址)
socket_server.listen(100) # 设置监听的最大连接数为100
while True:
    client_socket, client_address = socket_server.accept()    # 阻塞等待连接 返回连接的客户端 socket对象及其地址      
	#服务器端与客户端交互流程
    while True:
        data = client_socket.recv(1024).decode("UTF-8")     #循环接受数据
    	print(f"服务端收到数据 : {data}")
    	client_socket.send(f"服务端收到如下: {data}".encode())   #向客户端发送服务端接受到的数据
    	print(f"向客户端发送: {data}")
        if data == '0':   
            break           
    client_socket.close()       # 关闭连接
    print(f'客户端断开连接 {client_address}')

2、客户端

创造socket实例对象

import socket
client_socket = socket.socket()

客户端连接服务器

client_socket.connect(("172.20.10.6", 8989))      #IP地址和端口号需要放在元组中(此处为服务端的IP地址与端口号)

进入与服务端的交互

while True:
    command = input("请输入发送内容: ")
    client_socket.send(command.encode())
    print(f"客户端向服务端发送: {command}")
    if command == '0':
        break
    data = client_socket.recv(1024).decode("UTF-8")    # 接收服务器数据
    print(f"服务端: {data}")

关闭连接

client_socket.close()

完整代码

import socket
client_socket = socket.socket()                 # 创建 socket 实例对象
client_socket.connect(("172.20.10.6", 8989))    # IP地址和端口号需要放在元组中(此处为服务端的IP地址与端口号
while True:
    command = input("请输入: ")                 # 获取命令行输入
    client_socket.send(command.encode())        # 发送给客户端
    print(f"客户端发送数据: {command}")             
    if command == '0':
        break                                   # 主动停止通讯
    data = client_socket.recv(1024).decode("UTF-8")    # 接受来自服务器的数据
    print(f"接受到服务端的数据: {data}")                    
client_socket.close()                           #关闭连接
print("客户端关闭") 

樹莓派開發日記:基於python實現樹莓派與主機的TCP通訊

示範在區網中以樹莓派當 TCP 伺服器、主機當用戶端:附上連線準備與查 IP、bind/listen/accept 與用戶端收發的中文輸出入範例程式。

來源:https://blog.csdn.net/2403_87969572/article/details/146921951

抓取時間(ISO本地):2026-05-18 05:16:53


文章目錄


前言

當今物聯網技術迅速發展,樹莓派作為一款功能強大且價格親民的單板計算機,已廣泛應用於各種智能硬件項目。為了實現樹莓派與其他設備之間的通信,TCP協議作為一種常用的網絡通信協議,成為了很多開發者的首選。在這篇博客中,我們將探討如何通過Python語言在樹莓派上實現TCP網絡通信。


一、準備

能查詢到這篇文章的朋友相比對樹莓派已經不陌生了,那我們直接從TCP通訊開始講起,但在此之前我們需要對樹莓派進行一些簡單的配置

1、增添WiFi 模塊

可以參考這篇文檔 樹莓派增添WiFi 模塊(nmcli)連接操作

2、在樹莓派上配置Python環境

可以參考這篇文檔 樹莓派如何安裝 Python 環境

3、查看主機與樹莓派的IP地址(在同一個局域網內)

樹莓派

在終端輸入以下命令

hostname -I

或將鼠標放在wifi圖標上既可看見

主機

一、通過命令提示符查看
按下 Win + R 鍵打開運行對話框,輸入 cmd,然後按 Enter 鍵或點擊“確定”以打開命令提示符。在命令提示符窗口中,輸入 ipconfig 命令,然後按 Enter 鍵。

二、通過網絡連接控制面板
1、在鍵盤上,同時按下Windows+R鍵。
2、複製並粘貼上ncpa.cpl,按回車鍵。
在這裡插入圖片描述
3、則雙擊以太網/Wi-Fi連接
4、點擊“詳情信息”按鈕。
5、“IPv4地址”那一行對應的就是通常使用的IP地址

4、遠程桌面連接樹莓派操作(非必要)

可以參考這篇文檔 使用VNC-viewer對樹莓派5 遠程連接桌面

二、TCP通訊簡介

TCP(傳輸控制協議)是一種面向連接的、可靠的通信協議,它用於在計算機網絡中傳輸數據。TCP協議通過在發送端和接收端之間建立連接,確保數據的正確、按序傳輸。當數據被髮送時,TCP會將數據分割成多個小包並加上序號,同時接收端會確認接收到的數據包,確保沒有丟失或錯誤。如果發現丟失的包,TCP會請求重新傳輸,直到所有數據都完整且準確地到達接收端。其基於客戶端和服務器的模型進行。在這種模型中,客戶端是發起連接的設備,它請求與服務器建立通信並向其發送數據。服務器是提供服務的設備,它等待客戶端的連接請求,一旦建立連接,服務器就開始接收客戶端發來的數據,並進行處理後返回響應。
TCP通訊示意圖片
在本次TCP通訊中,考慮到項目需求,將樹莓派作為服務器端,主機作為客戶端進行通訊。

三、具體步驟

1、服務端

創造socket實例對象

import socket
socket_server = socket.socket()

綁定本地的IP地址

socket_server.bind(("172.20.10.6", 8989))
#注意這邊的IP地址應該是服務器(也就是樹莓派)的IP地址

設置監聽的最大連接數為100

socket_server.listen(100)

阻塞等待連接

while True:
	client_socket, client_address = socket_server.accept()

服務器端與客戶端交互流程

	while True:
    	data = client_socket.recv(1024).decode("UTF-8")
    	print(f"服務端收到數據 : {data}")
    	client_socket.send(f"服務端收到如下: {data}".encode())
    	print(f"向客戶端發送: {data}")
    	if data == '0':
            break

關閉連接

	client_socket.close()
	print(f'客戶端斷開連接 {client_address}')

完整代碼

import socket
socket_server = socket.socket()   # 創建socket實例對象
socket_server.bind(("172.20.10.6", 8989))  # 實例對象綁定服務端的 IP 地址和端口號(此處是服務器IP地址)
socket_server.listen(100) # 設置監聽的最大連接數為100
while True:
    client_socket, client_address = socket_server.accept()    # 阻塞等待連接 返回連接的客戶端 socket對象及其地址      
	#服務器端與客戶端交互流程
    while True:
        data = client_socket.recv(1024).decode("UTF-8")     #循環接受數據
    	print(f"服務端收到數據 : {data}")
    	client_socket.send(f"服務端收到如下: {data}".encode())   #向客戶端發送服務端接受到的數據
    	print(f"向客戶端發送: {data}")
        if data == '0':   
            break           
    client_socket.close()       # 關閉連接
    print(f'客戶端斷開連接 {client_address}')

2、客戶端

創造socket實例對象

import socket
client_socket = socket.socket()

客戶端連接服務器

client_socket.connect(("172.20.10.6", 8989))      #IP地址和端口號需要放在元組中(此處為服務端的IP地址與端口號)

進入與服務端的交互

while True:
    command = input("請輸入發送內容: ")
    client_socket.send(command.encode())
    print(f"客戶端向服務端發送: {command}")
    if command == '0':
        break
    data = client_socket.recv(1024).decode("UTF-8")    # 接收服務器數據
    print(f"服務端: {data}")

關閉連接

client_socket.close()

完整代碼

import socket
client_socket = socket.socket()                 # 創建 socket 實例對象
client_socket.connect(("172.20.10.6", 8989))    # IP地址和端口號需要放在元組中(此處為服務端的IP地址與端口號
while True:
    command = input("請輸入: ")                 # 獲取命令行輸入
    client_socket.send(command.encode())        # 發送給客戶端
    print(f"客戶端發送數據: {command}")             
    if command == '0':
        break                                   # 主動停止通訊
    data = client_socket.recv(1024).decode("UTF-8")    # 接受來自服務器的數據
    print(f"接受到服務端的數據: {data}")                    
client_socket.close()                           #關閉連接
print("客戶端關閉") 

Raspberry Pi Dev Log: Host–Pi TCP Chat with Python Sockets

Covers LAN TCP between a Raspberry Pi server (bind/listen/accept) and a desktop client (connect), with preparation links plus minimal Python echo/send code blocks matching the Chinese source strings.

Raspberry Pi Dev Log: Host–Pi TCP Chat with Python Sockets

Source: https://blog.csdn.net/2403_87969572/article/details/146921951

Captured at (local ISO): 2026-05-18 05:16:53


Introduction

IoT projects lean heavily on the Raspberry Pi family for affordable Linux at the edge. Among transport layers, TCP remains the default first hop when you need reliable, ordered byte streams. This article shows how to stitch a minimal Python socket demo so the Pi behaves as the server while your Windows desktop joins as the client.


I. Preparation

Readers landing here are usually already onboarded to Raspberry Pi basics—so we pivot quickly into TCP—but you still need baseline connectivity.

1. Adding Wi-Fi

Reference walkthrough: nmcli Wi-Fi module on Raspberry Pi

2. Installing Python on Raspberry Pi

Use your distro’s guide, e.g. Python environment on Raspberry Pi

3. Reading PC & Pi IPv4 on the same LAN

Raspberry Pi

hostname -I

Or hover the Wi-Fi tray icon for the assigned address.

Host PC

A. Command PromptWin + Rcmd → run ipconfig.

B. Network adapter GUI

  1. Win + R → paste ncpa.cpl → Enter
    在这里插入图片描述
  2. Double-click Ethernet or Wi-Fi.
  3. Open Details / Properties dialogs; copy IPv4 Address.

4. Remote desktop (optional)

If you prefer GUI upkeep: VNC Viewer targeting Raspberry Pi 5 desktops

II. TCP overview

Transmission Control Protocol is connection-oriented and reliable: segments carry sequence numbers, acknowledgements chase loss, reordering heals jitter, clients initiate while servers listen/accept.

TCP通讯示意图片

This lab pins the Raspberry Pi as server (bind/listen) and Windows as client (connect), mirroring IoT gateways talking back to desktops.

III. Hands-on steps

Swap 172.20.10.6 placeholders for your Pi’s reachable IPv4; keep firewall rules open on port 8989 if relevant.

1. Server side

Create socket endpoint:

import socket
socket_server = socket.socket()

Bind NIC + listening port (must reflect Pi LAN IP):

socket_server.bind(("172.20.10.6", 8989))

Listen backlog:

socket_server.listen(100)

Accept loop scaffolding:

while True:
	client_socket, client_address = socket_server.accept()

Serve / echo loop skeleton:

	while True:
    	data = client_socket.recv(1024).decode("UTF-8")
    	print(f"服务端收到数据 : {data}")
    	client_socket.send(f"服务端收到如下: {data}".encode())
    	print(f"向客户端发送: {data}")
    	if data == '0':
            break

Tear down per session:

	client_socket.close()
	print(f'客户端断开连接 {client_address}')

Full server script

import socket
socket_server = socket.socket()
socket_server.bind(("172.20.10.6", 8989))
socket_server.listen(100)
while True:
    client_socket, client_address = socket_server.accept()
    while True:
        data = client_socket.recv(1024).decode("UTF-8")
    	print(f"服务端收到数据 : {data}")
    	client_socket.send(f"服务端收到如下: {data}".encode())
    	print(f"向客户端发送: {data}")
        if data == '0':
            break
    client_socket.close()
    print(f'客户端断开连接 {client_address}')

2. Client side

Initialize:

import socket
client_socket = socket.socket()

Connect to Pi:

client_socket.connect(("172.20.10.6", 8989))

Interactive REPL:

while True:
    command = input("请输入发送内容: ")
    client_socket.send(command.encode())
    print(f"客户端向服务端发送: {command}")
    if command == '0':
        break
    data = client_socket.recv(1024).decode("UTF-8")
    print(f"服务端: {data}")

Shutdown

client_socket.close()

Full client script

import socket
client_socket = socket.socket()
client_socket.connect(("172.20.10.6", 8989))
while True:
    command = input("请输入: ")
    client_socket.send(command.encode())
    print(f"客户端发送数据: {command}")
    if command == '0':
        break
    data = client_socket.recv(1024).decode("UTF-8")
    print(f"接受到服务端的数据: {data}")
client_socket.close()
print("客户端关闭")