最近在STM32F767的开发板上移植了LWIP UDP的代码,开发板的资料里面有介绍LWIP移植的文档,介绍了几种网络通信方式,如TCP server,TCP client,UDP,按照文档里面的介绍也很容易实现。这里我选择的是基于ucos2操作系统的UDP网络通信。 开发板给的demo里面是一对一的模式,2块板子间建立UDP链接,进行网络数据传输。如下图所示:

现在项目需要实现一对多,就是1个host做主机,通过UDP方式连接多个slave,主机的IP地址固定,但slave们的IP地址只有slave本身知道,host不知道各个salve的IP地址,连接方式如下图:

对于,一对一的UDP连接,demo里面给的驱动代码很简单,主要就是几个接口函数。lwip的初始化,还有就是UDP的线程函数。为了方便阅读代码里面省略好多代码,只显示了主要的几个函数。

lwip_comm_init()lwip的初始化

//udp 任务函数

static void udp_thread(void *arg)

{

/* 1. 创建UDP结构,并绑定本地IP地址及端口号 */

udpconn = netconn_new(NETCONN_UDP); //创建一个 UDP 链接

err = netconn_bind(udpconn,IP_ADDR_ANY,UDP_DEMO_PORT);//绑定本地IP地址和端口号

/* 2. 将UDP结构与远端IP地址及端口号进行连接 */

IP4_ADDR(&destipaddr,remoteip[0],remoteip[1],remoteip[2],remoteip[3]); //构造远端 IP 地址

netconn_connect(udpconn,&destipaddr,UDP_DEMO_PORT); //连接到远端主机

/* 3. 数据发送部分 */

sentbuf = netbuf_new();

netbuf_alloc(sentbuf,strlen((char *)udp_demo_sendbuf));

err = netconn_send(udpconn,sentbuf); //将 netbuf 中的数据发送出去

netbuf_delete(sentbuf); //删除 buf

/* 4. 数据接收部分 */

netconn_recv(udpconn,&recvbuf);

}

上面代码是在双方确定IP地址的情况下,建立的连接,并进行数据传输的方式。2块板子的代码是一样的,只是要分清本地IP(自己的IP)和remote IP(对端的IP)就好了。

下面修改代码以实现一对多的UDP方式。一下是host端的代码,至于slave端的代码就是和上面的代码一样,注意host不知道slave的IP地址,但是slave知道host的IP地址。这里host和slave都是人为分的,并不是网络里面的概念。

lwip_comm_init()lwip的初始化

//udp 任务函数

static void udp_thread(void *arg)

{

/* 1. 创建UDP结构,并绑定本地IP地址及端口号,对于host来说,不需要调用什么建立连接函数,

在完成了UDP结构创建及绑定本地IP之后就可以接收来自任何slave发送来的数据 */

udpconn = netconn_new(NETCONN_UDP); //创建一个 UDP 链接

err = netconn_bind(udpconn,IP_ADDR_ANY,UDP_DEMO_PORT);//绑定本地IP地址和端口号

/* 4. 数据接收部分 */

netconn_recv(udpconn,&recvbuf);

if(recvbuf != NULL){

//接收到数据,假设这里接收到的是slave发上来的自己的IP地址,并将IP地址放在remoteip[]中,

那么可以将上面代码的第二第三部分放在这里,实现host和远端slave建立连接,并向slave发送一笔数据。

/* 2. 将UDP结构与远端IP地址及端口号进行连接 */

IP4_ADDR(&destipaddr,remoteip[0],remoteip[1],remoteip[2],remoteip[3]); //构造远端 IP 地址

netconn_connect(udpconn,&destipaddr,UDP_DEMO_PORT); //连接到远端主机

/* 3. 数据发送部分 */

sentbuf = netbuf_new();

netbuf_alloc(sentbuf,strlen((char *)udp_demo_sendbuf));

err = netconn_send(udpconn,sentbuf); //将 netbuf 中的数据发送出去

netbuf_delete(sentbuf); //删除 buf

}

}

lwip可以用于发udp_LWIPUDP一对多相关推荐

  1. lwip可以用于发udp_CubeMX初始化正点原子STM32F407 LAN8720A调通LWIP

    正点原子芯片的外接晶振是8Mhz,CubeMX软件外部晶振认是25Mhz,不过我们这里问题不大,用内部晶振.算了,还是用外部吧,外部的精确. 时钟树的配置算是老规矩,168Mhz最大. 然后就是ETH ...

  2. 建行短暂上线数字货币,可用于发工资,不会替代微信和支付宝

    "对于人民银行研发的数字人民币,并不是大家理解的加密资产,而是人民币的数字化." 本文谨代表作者个人观点,不代表火星财经立场,该内容旨在传递更多市场信息,不构成任何投资建议. 整理 ...

  3. vba给服务器发送消息,使用VBA实现发邮件功能

    财务MM经常要给员工发送每月的工资信息,一个个发送实在是太忙了.本文将介绍使用VBA实现工资信息的自动发送.有了这个功能,财务MM只需要把基本数据准备好,然后按下按钮只要选择需要发送的对象.就可以快速 ...

  4. LwIP 之一 源码目录文件详解及移植说明

       lwIP 是 TCP/IP 协议套件的一个小型独立实现.lwIP TCP/IP 实现的重点是减少 RAM 使用同时仍然有一个完整的 TCP. 这使得 lwIP 适合使用在具有数 10 千字节的可 ...

  5. EOS 命令行创建账号及发币

    基于centos7 1611 安装docker-ce,一定是docker-ce而不能是老版的docker 下载eos镜像 docker pull eosio/eos 单独启动钱包 docker run ...

  6. python实现给你女朋友发天气预报和情话

    今天说一下如何用python给你女朋友发天气预报和情话,让她明白程序员也有浪漫 整体思路: 上网爬取天气信息 上网爬取情话 发邮件 实现定时发邮件 需要用到的模块: requests:用于向网站发送请 ...

  7. matlab 训练一个用于降维的暹罗网络(孪生网络)

    原文:https://ww2.mathworks.cn/help/deeplearning/ug/train-a-siamese-network-for-dimensionality-reductio ...

  8. Lwip中实现DM9000/DM9003驱动之一

    目录 一:Lwip协议栈结构 二:两个重要的数据结构 1.Netif 2.Ethernetif 三:数据收发流程 1.分层的实现方式 2.数据流程 1.函数注册 2.接口初始化 3.数据发送 4.数据 ...

  9. CSMA/CD在全双工和半双工模式下的区别

    谈谈以太网中何时使用CSMA/CD冲突检测机制 关于以太网何时使用CSMA/CD检测机制,这个问题前两天刚和朋友做了讨论.在网络上搜索和很久,也有一些同行们不太理解,特别是一些初学CCNA的,没有工作 ...

最新文章

  1. mysql docker 制作_docker 制作自己的mysql镜像
  2. 这个比肩ImageNet的数据集遭MIT紧急下架,原因令人愤怒
  3. 【LeetCode】0830.较大分组的位置
  4. CentOS 6.4 Heartbeat+mysql+nfs实现高可用的mysql集群
  5. ctypes python_Python使用Ctypes与C/C++
  6. php 后门代码_分析一段PHP的后门代码,很恶心
  7. 基于html5背景图片自适应代码
  8. SQL中触发器实例讲解(转)
  9. 面试官让我用channel实现sync包里的同步锁,是不是故意为难我?
  10. 氢气露点和湿度换算_如何创建氢气鼓组以获取乐趣和收益
  11. 常用JavaScript 收集
  12. int 转为字节后 低字节在前_NumPy 字节交换
  13. Linux 网络安全技巧
  14. nginx集群部署,实现负载均衡和nfs共享
  15. 金融:收益利率计算器
  16. 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。剑指Offer(32)
  17. openCV教程04
  18. 【初/中级前端面经】中小型公司面试时都会问些什么?
  19. Leetcode_NO199_二叉树的左视图,右视图
  20. 软件测试方法—动态测试

热门文章

  1. 完整的Python 3和树莓Pi大师课 Complete Python 3 and Raspberry Pi Masterclass
  2. 读书:有趣 -- 酒鬼与圣徒
  3. awk3.0 — awk变量
  4. 40.多进程同步--锁--多把锁
  5. 服务器 主动 推送 客户端浏览器 消息***
  6. 洛谷—— P1118 [USACO06FEB]数字三角形Backward Digit Su…
  7. WPF中Auto与*的差别
  8. 标定(二)----------双目相机与IMU联合标定(工具箱使用方法——Kalibr)
  9. Java线上问题排障:Linux内核bug引发JVM死锁导致线程假死
  10. PHP数据库连接池SQL Relay安装使用