注意

这是最新开发分支的文档,可能包含尚未在发布版本中提供的功能。如果您在寻找特定版本的文档,请使用左侧的下拉菜单选择。

TCP Client 例程讲解#

例程位置#

  • 开发板固件路径:/sdcard/examples/14-Socket/tcp_client.py

  • SDK 源码路径:src/canmv/resources/examples/14-Socket/tcp_client.py

该例程把开发板作为 TCP 客户端,连接电脑上的 TCP 服务,并连续发送 10 条测试 消息。

运行前准备#

先在电脑上启动 TCP 调试工具并监听一个端口。然后修改脚本中的两类配置:

NETWORK_TYPE = "wifi_sta"
WLAN_DEVICE = "auto"
WIFI_SSID = "TEST"
WIFI_PASSWORD = "12345678"
NETWORK_TIMEOUT = 20
ai = socket.getaddrinfo("192.168.1.110", 8080)

192.168.1.110 改为电脑的 IP,把 8080 改为调试工具监听的 TCP 端口。电脑与 开发板必须网络互通,电脑防火墙也必须允许该端口入站。

代码流程#

连接网络#

netif, _ = connect_network(
    NETWORK_TYPE,
    ssid=WIFI_SSID,
    password=WIFI_PASSWORD,
    wlan_device=WLAN_DEVICE,
    timeout=NETWORK_TIMEOUT,
)

公共网络库负责选择网卡、等待 IP 和设置默认上行,应用无需写死 netdev 名称。

创建 TCP Socket 并解析地址#

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
addr = socket.getaddrinfo("192.168.1.110", 8080)[0][-1]

AF_INET 选择 IPv4,SOCK_STREAM 选择有连接、可靠且有序的 TCP 字节流。 getaddrinfo() 同时适用于 IPv4 字符串和域名。

连接服务端#

s.connect(addr)

TCP 必须完成连接后才能发送数据。连接被拒绝通常表示目标地址可达,但对应端口没有 服务监听;连接超时通常与地址、路由或防火墙有关。

连续发送消息#

for i in range(10):
    message = "K230 tcp client send test {0} \r\n".format(i)
    s.write(message)
    time.sleep(0.2)

例程每隔 0.2 秒发送一条带序号的消息。TCP 是字节流,不保留单次 write() 的 消息边界;示例用 \r\n 方便接收端按行显示或拆分数据。

关闭连接#

发送完成后脚本等待 1 秒,再调用 s.close() 释放连接并打印 end

运行与验证#

  1. 先启动电脑端 TCP 服务并确认监听地址和端口。

  2. 在 CanMV IDE 中运行开发板固件路径下的脚本。

  3. 电脑端应收到序号 09 的 10 条消息。

  4. 若电脑有多块网卡,目标 IP 应选择与开发板互通的那一个,而不是回环地址。

评论列表
条评论
登录