TCP Client 例程讲解#
例程位置#
开发板固件路径:
/sdcard/examples/14-Socket/tcp_client.pySDK 源码路径:
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。
运行与验证#
先启动电脑端 TCP 服务并确认监听地址和端口。
在 CanMV IDE 中运行开发板固件路径下的脚本。
电脑端应收到序号
0到9的 10 条消息。若电脑有多块网卡,目标 IP 应选择与开发板互通的那一个,而不是回环地址。
