xt-sdk 文档 v1.0.3
xt-sdk 嵌入式 SDK API 参考
载入中...
搜索中...
未找到
多平台 Socket 综合示例

平台 目标
lm620 r4f4
windows simulator

演示如何使用 xt_socket(跨平台 Socket) 组件编写跨平台网络应用程序,覆盖 15 个功能场景。

预期行为

初始化后依次运行以下演示:

1. TCP 客户端/服务器 — 创建 TCP 服务器,客户端连接后发送 Hello from TCP! ,服务器接收并 echo 回客户端,客户端 shutdown(SHUT_WR) 关闭写半部。

[Server] socket() OK
[Server] setsockopt(SO_REUSEADDR) OK
[Server] bind(127.0.0.1:0) OK
[Server] listen() OK
[Server] listening on 127.0.0.1:xxxx
[Client] socket() OK
[Client] connect(127.0.0.1:xxxx) OK
[Server] accept() OK
[Client] sent 15 bytes: "Hello from TCP!"
[Server] received 15 bytes: "Hello from TCP!"
[Client] received echo 15 bytes: "Hello from TCP!"
[Client] shutdown(SHUT_WR) OK

2. UDP 通信 — 创建两个 UDP 套接字,A 向 B 发送 UDP hello from A! ,B 接收后回复 Reply from B! ,A 接收回复。

3. select 多路复用 — select() 检测服务器套接字可读(有连接到达),accept 后检测客户端套接字可写。

4. 错误处理 — 测试非阻塞 connect 到不可达端口,验证 xt_socket_errno() / xt_socket_strerror() 和 inet_pton / inet_ntop 地址转换。

5. getsockopt 查询 — 验证 TCP/UDP 套接字的 SO_TYPE 、 SO_RCVBUF 、 SO_SNDBUF 选项。

6. getpeername — 验证 getpeername() 在 accept 端和 connect 端均能正确返回对端端口。

7. 非阻塞模式 — 验证 xt_socket_set_nonblock() 可在阻塞和非阻塞模式之间切换。

8. read/write — 验证 POSIX 风格的 xt_socket_read() / xt_socket_write() 在 TCP 套接字上正常收发。

9. getaddrinfo — 验证地址解析成功( 127.0.0.1:80 )和非法域名正确失败。

10. 套接字超时 — 设置 SO_RCVTIMEO 为 100ms 并验证读取一致。

11. TCP Keepalive — 启用 SO_KEEPALIVE 并设置 TCP_KEEPIDLE=10 / TCP_KEEPINTVL=5 / TCP_KEEPCNT=3 。

12. SO_LINGER — 设置 SO_LINGER(on=1, linger=0) 并验证读取一致。

13. SO_BROADCAST — 在 UDP 套接字上启用广播选项。

14. IP_TTL — 设置 IP_TTL=64 并验证(不支持时输出 SKIP )。

15. 非阻塞 connect + 多连接并发 — 同时发起 3 个非阻塞连接,通过 select 检测完成,通过 SO_ERROR 确认结果,服务器 accept 全部 3 个连接。

最后输出:

All demos completed.

编译和运行

cd examples/network/socket_multi_platform
xt --target windows/simulator fullclean build
xt --target windows/simulator run
cd examples/network/socket_multi_platform
xt --target lm620/r4f4 fullclean build

注意事项

  • 本示例使用 xt_socket(跨平台 Socket) 跨平台封装,所有代码使用标准 BSD Socket API 名( socket() / bind() / listen() / connect() / send() / recv() 等),平台适配由 xt_socket(跨平台 Socket) 组件统一处理
  • windows/simulator 平台在初始化后即可直接运行测试,无需等待网络就绪
  • lm620 平台需要等待蜂窝网络就绪后才能运行