一 前言

(1)负责项目中组播开发测试工作。期间由于缺乏设备的原因,中间搁置了好久。直到昨天下午临近下班,终于,完成udp组播整个的开发测试工作。


二 开发过程

(1)首先从实现udp协议说起。udp协议使用的结构体如下:

typedef struct socketaddr {uint16_t sin_Family;  //协议族uint16_t sin_port; //端口号uint32_t sin_addr;/*mac[6] / udp/tcp port[2] + ip[4]*/
}SSockAddr;

(2)实现udp协议的几个主要函数,这里不提供详细的源代码,只是提供函数名及其参数,以供参考,回忆复习:

uint8_t fn_W5100S_Socket(uint8_t uc_Minor,uint8_t uc_Type,uint8_t uc_Proto)
{uint8_t uc_Ret=SYS_YES;if(uc_Proto==SOCK_DGRAM){W5100S_Init(uc_Minor);    //内部网卡初始化uc_Ret=SYS_YES;}else{uc_Ret=SYS_NO;}return uc_Ret;}
uint8_t fn_W5100S_Bind(uint8_t uc_Minor,SSockAddr *pst_SockAddr,uint32_t ui_Gw, uint32_t ui_Mask)    //绑定网卡,网关
{SocketTypeDef *Pst_Addr=NULL;Pst_Addr=(SocketTypeDef *)pst_SockAddr;W5100S_SetIP(uc_Minor,Pst_Addr->ui_SinAddr,ui_Gw,ui_Mask);    //配置局域网,return 0;
}                                                                                                                   uint32_t fn_W5100S_Recvfrom(uint8_t uc_Minor,uint8_t uc_Port,uint8_t auc_RecvBuf[],uint32_t BufLen,SSockAddr *pst_SockAddr)
{uint32_t ui_Recv_Len=0;SocketTypeDef *Pst_SocAddr=NULL;Pst_SocAddr=(SocketTypeDef *)pst_SockAddr;ui_Recv_Len=RecvFrom_RXQueue(uc_Minor,uc_Port,Pst_SocAddr,auc_RecvBuf,BufLen);   //应用读取接收队列中的数据,最终存到了auc_SocAddr中return ui_Recv_Len;
}uint8_t fn_W5100S_Sendto(uint8_t uc_Minor,uint8_t uc_Port,uint8_t auc_SendBuf[],uint32_t BufLen,SSockAddr *pst_SockAddr)
{uint8_t uc_Ret=SYS_YES;SocketTypeDef *Pst_SocAddr=NULL;Pst_SocAddr=(SocketTypeDef *)pst_SockAddr;uc_Ret=WriteDataToSendQueue(uc_Minor,uc_Port,Pst_SocAddr,auc_SendBuf,BufLen);return uc_Ret;
}

(3)以上程序的叙述,都是从应用层的角度进行分析的,没有提到驱动层的程序,以下简述以下,驱动层的开发:

参考原理图,初始化配置引脚。引脚输入输出模式,选择指定的引脚,时钟配置,等等。
网卡的配置,SRAM,FLASH,等存储空间的配置。参考STM32技术开发手册,网卡配置开发手册等。
驱动开开发是一个需要耐心的工作,认真,仔细,写好程序后,还要编写测试程序,对代码进行检测
驱动开发有趣的地方是,它需要对硬件进行操作,经常用到的设备有:可调节电源,示波器,仿真器,开发板,有时会用到电焊。开发板如下:

(4)组播配置程序,这里应用的网卡是W5100网卡,详细内容参考它的技术开发手册,程序是对直接对寄存器进行操作的,程序如下:

 /*设置Socket的传输协议为UDP*/W5100S_WriteReg(uc_EthNum,W5100S_Sn_Addr(uc_SocketNum,Sn_MR),SN_MR_UDP|SN_MR_MF_ENABLE|SN_MR_MULTI_ENABLE);/*配置Socket的源UDP端口号*/Short_To_Byte(auc_Temp,Pst_Addr->sin_port);W5100S_WriteBuff(uc_EthNum,W5100S_Sn_Addr(uc_SocketNum,Sn_PORTR0),auc_Temp,ARRAY_SIZE(auc_Temp));uint8_t auc_ip[4]={225,0,0,20};  //目标ip地址uint8_t auc_port[4]={6,0,0,0};   //目标端口uint8_t auc_mac[6]={1,0,225,0,0,20};  //目标mac地址/*配置Socket的 目标端口*/W5100S_WriteBuff(uc_EthNum,W5100S_Sn_Addr(uc_SocketNum,Sn_DPORTR0),auc_port,4);//目标ip地址W5100S_WriteBuff(uc_EthNum,W5100S_Sn_Addr(uc_SocketNum,Sn_DIPR0),auc_ip, 4);//目标mac地址W5100S_WriteBuff(uc_EthNum,W5100S_Sn_Addr(uc_SocketNum,Sn_DHAR0),auc_mac, 6);//udp多播模式,1开启组播 Sn_MR[MULTI] = 1W5100S_WriteReg(uc_EthNum, W5100S_Sn_Addr(uc_SocketNum,Sn_MR), 0xc2);  /*启动被设置的Socket*/W5100S_WriteReg(uc_EthNum,W5100S_Sn_Addr(uc_SocketNum,Sn_CR),SN_CR_OPEN);

(5)组播测试环境,两台电脑,一台二层交换机,待测开发板,这是udp组播测试主要的硬件设备。还有其他的像是引脚线,电源,网线等。

(6)组播测试所需要的软件,cmd终端环境,ping指令检测网卡是否配置成功,是否在同一网段,组播测试主要用的软件就是:

(7)将两台电脑,开发板(也可以看作可以独立运行的一个小电脑),通过网线都连接到同一个交换机上,使用ping指令监测三台设备是否在同一个网段。然后启动运行设备,两台电脑都打开,上面的测试工具。
(8)当开发板发送的数据,两台电脑同时都可以收到时,就代表组播程序开发成功了,项目的这一个阶段可以收尾了。哈哈哈哈,我可是忙了好久,才搞成功的。


三 总结
(1)对自己写出的程序要有自信,我写好的程序就是正确的,问题肯定是出在其他的地方。

UDP组播开发测试实例相关推荐

  1. 【网络工具】使用 iperf测试 udp组播

    文章目录 下载iperf程序 测试组播协议 pc1 客户端发送组播包 pc2 服务端接收组播包 参数说明 -B, --bind host 服务端专用参数 -T, --ttl 客户端专用参数 下载ipe ...

  2. 基于stm32f107 stm32cube 和 LWIP 协议实现 udp 组播通信

    最近在做一个基于stm32f107 实现 UDP 组播通信的项目,项目基于 stm32cube 配置生成,如下图: UDP组播头文件: #ifndef __MULTICAST_H__ #define ...

  3. UDP 组播---你需要了解这些

    先来了解下UDP UDP 是UserDatagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一 ...

  4. UDP 组播---基本概念

     本文章已收录于: 先来了解下UDP UDP 是UserDatagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式 ...

  5. (转)C# 使用UDP组播实现局域网桌面共享

    转:http://www.cnblogs.com/mobwiz/p/3715743.html 最近需要在产品中加入桌面共享的功能,暂时不用实现远程控制:参考了园子里的一些文章,加入了一些自己的修改. ...

  6. UDP组播调试(使用TCPUDP调试工具)

    如何使用调试工具进行UDP组播调试 一.下载UDP&TCP调试工具 二.双击打开调试工具并建立端口 2.1 创建组播客户端1 类型:UDP(组播模式):目标IP:225.0.0.20:端口:6 ...

  7. vsual studio 2013环境 Udp组播

    前言` MFC(Microsoft Foundation Classes)是微软基础类库的简称,是微软公司实现的一个c++类库,主要封装了大部分的windows API函数,vc++是微软公司开发的c ...

  8. ios 接收 c# socket udp 组播

    最近用wcf 服务 给ios和安卓做接口,做了几个ios的项目  用udp 组播 让ios多终端接收和刷新方法 做一个简单的小例子会把工程给大家下载的 c#代码:netSocketUDP.rar io ...

  9. udp组播的应用场景

    参考: <TCP/IP详解 卷一> 单播 unicast 在单播的情况下,任意两个主机的通信不会干扰网内其他主机(可能引起争夺共享信道的情况除外) 广播 有时候一个主机要向网上的所有其他主 ...

最新文章

  1. Java培训都学什么
  2. oi程序提交注意:bool
  3. HTML5 进阶系列:拖放 API 实现拖放排序
  4. c语言程序设计和数据结构,C语言程序设计与数据结构实践 闵光太主编.pdf
  5. 【渝粤教育】国家开放大学2019年春季 1308外国文学专题 参考试题
  6. 云计算交流会计算机操作,计算机二级考试真题-word-小王-云计算技术交流大会...
  7. C++自学-默认参数的函数
  8. python斐波那契递归_Python递归斐波那契示例
  9. Abp 为Swagger接口页添加详细注释
  10. win7 64位系统HP LaserJet P1008 / HP LaserJet P1008 P1007 驱动安装成功,但无法打印的原因...
  11. 【chromium cdm 模块源码分析】
  12. C语言实现平衡二叉树
  13. Android项目实践(二)——日记本APP
  14. javascript音乐播放器
  15. 仿抖音 抖音接口开发文档
  16. 关于麻将和牌算法的那些事
  17. java hasnext_Java扫描仪的hasNext()方法与示例
  18. P4:正则表达式(Regular Expression)学习笔记
  19. 更改技嘉主板开机画面
  20. utf8和utf8mb4的区别

热门文章

  1. 高性能网站 首屏渲染速度
  2. 云计算是什么意思?云计算管理平台有哪些?
  3. maven出现No plugin found for prefix ‘help‘ in the current project and in the plugin groups [org.ap
  4. OpenGL学习之VS2017+glfw+glew/glad/freeglut的基本配置与中文教程汇总
  5. 预测:2019年最值得关注的程序语言是什么?
  6. 【python拼图】遍历文件夹后,自动拼接图像成正方形图,或者指定行数显示
  7. sqluldr2-参数大全-中英文对照版
  8. MySQL select五个子句顺序及其快速记忆方法
  9. 赛门铁克公司太不厚道
  10. vue 大屏数字上下滚动