TCP连接与心跳包配置
本文档介绍了TCP连接与配置心跳包的相关接口,并通过demo_heartbeat.c进行举例演示。接口详细参数请参考LwIP(轻型 TCP/IP 协议栈)
TCP连接服务器收发数据流程
TCP连接服务器收发数据的大致流程如下:
-
连接服务器
-
创建套接字
-
绑定本地地址
-
DNS域名解析
-
连接服务器
-
发送数据
-
接收数据
-
关闭连接
TCP连接服务器
1.创建套接字
使用 socket
函数创建一个 TCP 套接字,用于后续的网络通信:
int socket_fd;
socket_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);// 创建TCP套接字(AF_INET: IPv4,SOCK_STREAM: TCP协议)
2.绑定本地地址
创建一个本地地址结构体,并使用 bind
函数将套接字与特定的本地地址和端口进行绑定,使套接字有一个明确的标识,以便在网络通信中进行数据的发送和接收:
struct sockaddr_in local4;// 本地地址结构体
memset(&local4, 0x00, sizeof(struct sockaddr_in));//清空结构体
local4.sin_family = AF_INET;// 使用IPv4地址
local4.sin_port = 1000;// 本地端口
bind(socket_fd, (struct sockaddr *)&local4, sizeof(struct sockaddr));// 绑定套接字到本地地址
3.DNS域名解析
用 gethostbyname
函数获取服务器的地址信息:
struct hostent *hostent;// 用于存储服务器地址信息的结构体
hostent = gethostbyname(TEST_SOCKET_SERVER);// 通过域名或IP获取服务器地址
4.连接服务器
创建服务器地址结构体,并使用 connect
函数连接到服务器:
struct sockaddr_in serv_addr;// 服务器地址结构体
memset(&serv_addr, 0, sizeof(serv_addr));// 清空结构体
serv_addr.sin_family = AF_INET;// 使用IPv4地址
serv_addr.sin_port = htons(TEST_SOCKET_TCP_PORT);// 服务器端口(字节序转换)
serv_addr.sin_addr = *((struct in_addr *)hostent->h_addr);// 从hostent中提取服务器IP地址
connect(socket_fd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));// 连接到服务器
发送TCP数据
调用send接口向服务器发送数据:
send(socket_fd, data, data_len, 0);//向服务器发送数据
关闭TCP连接
当需要关闭连接时,使用 close
函数关闭套接字:
ret = close(socket_fd);//关闭套接字
心跳包配置
心跳包配置的大致流程如下:
设置睡眠模式
- 通过
yopen_set_sleep_depth(yopen_sleep_depth_e sleep_depth)
设置睡眠深度:
yopen_set_sleep_depth(YOPEN_SLP_SLP1_STATE);//设置睡眠深度
- 通过
yopen_autosleep_enable(YOPEN_SLEEP_FLAG_E sleep_flag)
使能睡眠:
yopen_set_sleep_depth(YOPEN_SLP_SLP1_STATE);//使能睡眠
配置心跳包
在while循环中调用send接口发送心跳包数据,并通过yopen_rtos_task_sleep_ms()接口设置心跳包间隔时间:
while (1)
{
memset(data, 0, sizeof(data));
sprintf(data, TEST_SOCKET_DATA, i);//字符串输出
data_len = strlen(data);
ret = send(socket_fd, data, data_len, 0);//发送心跳包数据
yopen_trace("==========heartbeat send data %s", data);//打印心跳包共多少字节数据
yopen_rtos_task_sleep_ms(300*1000);//通过任务休眠设置心跳包间隔时间
}
举例演示
打开 demo_heartbeat.c
,经编译运行后烧录至开发板,具体过程参考Yopen 入门篇开发入门
服务器收到心跳包数据后界面如图所示,心跳包内容为tcp_data 0, 心跳间隔为五分钟: