基于LwIP socket的UDP服务器

来源:互联网 发布:linux搭建测试环境 编辑:程序博客网 时间:2024/05/17 05:15

上篇文章介绍了基于LwIP socket的UDP客户端编程的一个大概流程,本文主要介绍基于LwIP socket的UDP服务器的编写步骤,并且比较客户端和服务器之间的区别,UDP服务器编写步骤如下所示:

1、创建一个基于数据包的socket

2、设置本地服务器地址及端口号

3、将本地服务器地址与创建好的socket进行绑定

4、接收绑定好的socket的消息


经过了以上四个步骤以后,一个简单的UDP服务器就搭建好了,其他客户端发来的数据就会被服务器接收下来,其源代码如下所示

/*  *receive UDP packet from PC  *   local server IP:192.168.0.80 or INADDR_ANY  */#include <lwip/sockets.h>#include <lwip/err.h>#include <lwip/sys.h>#definePORT50000static RAW_U32 udp_msg[100];static void udp_server_thread(void *p_arg){struct sockaddr_in server_addr;int sock_fd;/* server socked */int err;int count = 0;sock_fd = socket(AF_INET, SOCK_DGRAM, 0);if (sock_fd == -1) {Uart_Printf("failed to create sock_fd!\n");RAW_ASSERT(0);}raw_memset(&server_addr, 0, sizeof(server_addr));server_addr.sin_family = AF_INET;//server_addr.sin_addr.s_addr = INADDR_ANY;server_addr.sin_addr.s_addr = inet_addr("192.168.0.80");server_addr.sin_port = htons(PORT);err = bind(sock_fd, (struct sockaddr *)&server_addr, sizeof(server_addr));if (err == -1) {RAW_ASSERT(0);}while (1) {raw_memset(udp_msg, 0, sizeof(udp_msg));err = recv(sock_fd, (RAW_U8 *)udp_msg, sizeof(udp_msg), 0);Uart_Printf("receive msg: %s", udp_msg);count++;}}void udp_server_init(void){sys_thread_new("udp_server_thread",  udp_server_thread, NULL, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO - 1);}


原创粉丝点击