这是基于 RT-Thread 基于多线程的非阻塞 socket 编程示例,本文主要是介绍如何使用 tcpclient.c API。详情可了解:多线程的非阻塞 socket 编程
| 名称 | 说明 |
|---|---|
| inc | 头文件目录 |
| src | 源代码目录 |
| examples | 例程目录 |
tcpclient 遵循 LGPLv2.1 许可,详见 LICENSE 文件。
- 依赖 EasyLogger 软件包
- 依赖 dfs 文件系统
- RT-Thread 3.0+,对 bsp 无依赖
测试 tcpclient.c 可参考例程代码,该代码位于: tcpclient_example.c
rt_tcpclient_t *rt_tcpclient_start(const char *hostname, rt_uint32_t port);
| 参数 | 描述 |
|---|---|
| hostname | IP 地址或域名 |
| port | 端口号 |
| 返回 | 描述 |
| tcpclient 对象指针 | 创建 TCP 客户端任务成功 |
| RT_NULL | 创建 TCP 客户端任务失败 |
输入服务器 IP 地址 & (自定义的)端口号;服务器(网络调试助手)监听这个端口号
void rt_tcpclient_close(rt_tcpclient_t *thiz);
| 参数 | 描述 |
|---|---|
| thiz | tcp client 对象 |
| 返回 | 描述 |
| 无 | 无 |
通信结束,用户使用此 API 关闭资源
void rt_tcpclient_attach_rx_cb(rt_tcpclient_t *thiz, rx_cb_t cb);
| 参数 | 描述 |
|---|---|
| thiz | tcp client 对象 |
| cb | 回调函数指针 |
| 返回 | 描述 |
| 无 | 无 |
回调函数需要由用户来写,可参考例程代码
rt_size_t rt_tcpclient_send(rt_tcpclient_t *thiz, const void *buff, rt_size_t len);
| 参数 | 描述 |
|---|---|
| thiz | tcp client 对象 |
| buff | 要发送的数据 |
| len | 数据长度 |
| 返回 | 描述 |
| > 0 | 成功,返回发送的数据的长度 |
| <= 0 | 失败 |
通信完毕,需要用户自己调用 rt_tcpclient_close() API 释放资源