UDP连接
本文档介绍了UDP连接的大致流程
UDP连接流程
UDP连接的大致流程:
-
查询网络状态
-
创建套接字
-
配置服务器地址
-
发送数据
-
接收数据
-
关闭连接
查询网络状态
调用接口:
yopen_nw_get_reg_status(nSim, &nw_status);
参数:
参数 | 说明 |
---|---|
nsim | 卡槽 |
nw_status | 网络状态结构体 |
示例;
do{
yopen_nw_get_reg_status(nSim, &nw_status);// 调用函数获取网络状态
yopen_rtos_task_sleep_ms(1000);
DEMO_UDP_TRACE("==========nw_status %d==========", nw_status.data_reg.state); // 打印网络状态
if(nw_status.data_reg.state == YOPEN_NW_REG_STATE_DENIED)
{
DEMO_UDP_TRACE("network reg denied exit !!!!");// 若网络注册被拒绝,打印信息
}
}while(!(nw_status.data_reg.state == YOPEN_NW_REG_STATE_HOME_NETWORK || nw_status.data_reg.state == YOPEN_NW_REG_STATE_ROAMING));//注网成功退出循环
创建套接字
调用接口:
socket(domain,type,protocol)
参数:
参数 | 说明 |
---|---|
domain | 协议族 |
type | 套接字类型 |
protocol | 协议类型 |
示例;
sockfd = socket(AF_INET, SOCK_DGRAM, 0);// 创建一个IPv4的UDP套接字
if (sockfd < 0)
{
DEMO_UDP_TRACE("socket creation failed");// 若套接字创建失败,打印信息
}
配置服务器地址
struct sockaddr_in server_addr;// 定义服务器地址结构体
memset(&server_addr, 0, sizeof(server_addr));// 初始化服务器地址结构体为0
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
发送数据
sendto(s,dataptr,size,flags,to,tolen)
参数:
参数 | 说明 |
---|---|
s | 套接字 |
dataptr | 指向要发送数据的指针 |
size | 要发送数据的长度 |
flags | 发送标志,通常为 0 |
to | 指向目标地址结构体的指针 |
tolen | 目标地址结构体的长度 |
示例:
strcpy(buffer, "hello udp server");// 将字符串复制到缓冲区
sendto(sockfd, buffer, strlen(buffer), 0,(struct sockaddr *)&server_addr, sizeof(server_addr));// 发送数据到服务器
接收数据
recvfrom(s,mem,len,flags,from,fromlen);
参数:
参数 | 说明 |
---|---|
s | 套接字 |
mem | 指向接收数据缓冲区的指针 |
len | 接收缓冲区的长度 |
flags | 接收标志,通常为 0 |
from | 指向发送方地址结构体的指针 |
fromlen | 发送方地址结构体的长度 |
示例:
socklen_t server_len = sizeof(server_addr);// 定义服务器地址结构体的长度
int n = recvfrom(sockfd, buffer, BUFFER_SIZE, 0,(struct sockaddr *)&server_addr, &server_len);// 从服务器接收数据
buffer[n] = '\0';// 在接收到的数据末尾添加字符串结束符
DEMO_UDP_TRACE("Server response: %s\n", buffer);// 打印服务器响应信息
关闭连接
调用接口:
close(s);
参数:
参数 | 说明 |
---|---|
s | 套接字 |
示例:
close(sockfd);// 关闭套接字
演示
按照上述步骤完成UDP连接后,向服务器发送数据进行测试,服务器收到数据
服务器发送数据,开发板接收并打印消息内容