基于LwIP socket的UDP服务器

上篇文章介绍了基于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 
#include 
#include 

#define	PORT			50000

static 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);
}


你可能感兴趣的:(LwIP)