正点原子lwIP学习笔记——Socket接口UDP实验
发布网友
发布时间:2024-10-02 10:49
我来回答
共1个回答
热心网友
时间:2024-11-23 22:03
Socket接口的UDP配置流程如下:
在Socket接口中,UDP配置步骤涉及Socket接口的创建、绑定、以及数据发送和接收。主要通过宏定义和socket函数实现。
例程功能:实现UDP服务器,能通过按键发送广播数据至客户端,同时接收其他客户端的广播数据,并实时显示在LCD屏幕上。
在main.c和freertos.c中,代码与之前的NETCONN实验类似。
在lwip_demo中,直接使用IP_ADDR宏定义为远程IP地址。与NETCONN实验不同的是,发送和接收使用两个线程,通过sys_thread_new创建发送线程。使用sockaddr_in结构体填充网络参数,建立Socket连接,绑定端口,并通过bind函数将连接与本地地址绑定。
数据接收通过while循环实现,利用memset初始化接收缓冲区,调用recv函数接收数据。接收到的数据通过xQueueSend发送到显示功能中显示。
发送线程调用自定义的lwip_send_thread函数,设置远程IP地址,通过按键改变发送标志位,调用sendto函数发送数据后清除标志位。
对于UDP广播实验,主要区别在于新建缓冲区和结构体,以及在lwip_demo中建立socket_info指针和内存分配。通过setsockopt设置选项值,配置IP协议、端口号和本地IP地址,进行广播配置。
在UDP组播实验中,首先配置HAL库,确保使用组播功能。在lwipopts.h中启用IGMP配置。在ethernetif.c中设置网卡的flags以支持广播、ARP协议、链接检测以及IGMP。
组播实验在link_socjet_info中添加ip_mreq组播结构体,并定义多播控制块ip_mreq结构体的mreq和信息长度socklen_t结构体的mreq_len。多播IP地址设置为“224.0.1.0”,在lwip_demo中定义mreq_info结构体指针。
在组播实验中,配置mreq_info以添加多播成员,然后通过setsockopt添加多组播成员。发送和接收线程与之前的步骤类似。
总结:Socket接口相较于NETCONN更为简单,适用于更广泛的开发场景。在需要实时性较高的情况下,可能会选择自行实现RAW接口。