<<返回上一页

UDP组播


关键词:UDP组播  W5500  WIZnet


主循环代码如下:
while(1)												// Socket状态机
{
	switch(getSn_SR(0))									// 获取socket0的状态
	{
		case SOCK_INIT:									// Socket处于初始化完成(打开)状态
			listen(0);									// 监听刚刚打开的本地端口,等待客户端连接
		break;
		case SOCK_ESTABLISHED:							// Socket处于连接建立状态
			if(getSn_IR(0) & Sn_IR_CON)			
			{
				setSn_IR(0, Sn_IR_CON);					// Sn_IR的CON位置1,通知W5500连接已建立
			}
			// 数据回环测试程序:数据从上位机客户端发给W5500,W5500接收到数据后再回给客户端
			len=getSn_RX_RSR(0);						// 读取W5500空闲接收缓存寄存器的值,Sn_RX_RSR表示接收缓存中已接收和保存的数据大小
			if(len>0)
			{
				recv(0,buffer,len);						// W5500接收来自客户端的数据,并通过SPI发送给MCU
				printf("%s\r\n",buffer);				// 串口打印接收到的数据
				send(0,buffer,len);						// 接收到数据后再回给客户端,完成数据回环
			}
			// W5500从串口发数据给客户端程序,数据需以回车结束
			if(USART_RX_STA & 0x8000)					// 判断串口数据是否接收完成
			{					   
				len=USART_RX_STA & 0x3fff;				// 获取串口接收到数据的长度
				send(0,USART_RX_BUF,len);				// W5500向客户端发送数据
				USART_RX_STA=0;							// 串口接收状态标志位清0
				memset(USART_RX_BUF,0,len+1);			// 串口接收缓存清0
			}
		break;
		case SOCK_CLOSE_WAIT:							// Socket处于等待关闭状态
			close(0);									// 关闭Socket0
		break;
		case SOCK_CLOSED:								// Socket处于关闭状态
			socket(0,Sn_MR_TCP,local_port,Sn_MR_ND);	// 打开Socket0,并配置为TCP无延时模式,打开一个本地端口
		break;
	}
}
UDP组播的测试步骤如下
  1. 用组播工具UDP Group创建组播ip地址以及端口号。如图1所示;图1是组播上位机创建的组播ip地址以及端口号,该地址是根据组播的要求来定义的; 端口号可自己定义,但是需要保证组播端口号跟设备的端口号保持一致;
  2. 编译下载;打开组播上位机工具,选择组播并创建一个组播组,ip地址和端口号入上图;创建成功后如图2。
  3. 组播创建成功后可通过该上位机向组播发送数据,设备收到数据后会将返回信息发送到组播组里面,上位机就能收到,效果如下图3。

注:第一包10个0是上位机向组播组发送的数据;第二包是上位机作为组播组里面的一个组播成员收到的来自组播组的数据;第三包数据时5500收到组播组的数据后向该组播组返回的数据;图4是串口打印消息。


图1:端口号设置息

图2:创建组播组



图3:组播发送数据

图4:串口打印消息


例程下载:UDP组播
编译环境:keil V5.11
硬件要求:W5500EVB