Skip to content

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连接后,向服务器发送数据进行测试,服务器收到数据

服务器发送数据,开发板接收并打印消息内容