当前位置: 首页 > news >正文

网站内容不收录做网站映射tcp

网站内容不收录,做网站映射tcp,wordpress推荐系统配置,秦皇岛解封最新消息今天STM32 LWIP UDP通信 前言设置 IP 地址UDP函数配置实验结果单播发送#xff0c;一对一发送广播发送#xff0c;一对多发送 可能遇到的问题总结 前言 之前没有接触过网络的通信#xff0c;工作需要 UDP 接收和发送通信#xff0c;在网上没有找到一对一、一对多的相关例程一对一发送广播发送一对多发送 可能遇到的问题总结 前言 之前没有接触过网络的通信工作需要 UDP 接收和发送通信在网上没有找到一对一、一对多的相关例程于是在技术总监对我的指导用正点原子板子给的例程是从官方的程序修改的实现了Lwip UDP通信一对一、一对多的发送程序可以随便指定发送ip地址、发送端口号以及发送十六进制或是 ASCII码都可以本人测试STM32F1系列和F4系列都没问题十分的方便。 设置 IP 地址 假设设置STM32单片机IP为:192.168.1.130 lwipx-ip[0]192; lwipx-ip[1]168;lwipx-ip[2]1;lwipx-ip[3]130;假设设置我的电脑的IP为:192.168.1.36 UDP函数配置 STM32单片机上电不需要每次手动按键调节设置远端IP地址ip地址、端口号 // udp_demo_set_remoteip();//先选择IPLCD_Clear(WHITE); //清屏POINT_COLORRED; //红色字体LCD_ShowString(30,30,200,16,16,WARSHIP STM32F103);LCD_ShowString(30,50,200,16,16,UDP Test);LCD_ShowString(30,70,200,16,16,ATOMALIENTEK); LCD_ShowString(30,90,200,16,16,KEY0:Send data); LCD_ShowString(30,110,200,16,16,KEY_UP:Quit); LCD_ShowString(30,130,200,16,16,KEY1:Connect);tbufmymalloc(SRAMIN,200); //申请内存if(tbufNULL)return ; //内存申请失败了,直接退出sprintf((char*)tbuf,Local IP:%d.%d.%d.%d,lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]);//服务器IPLCD_ShowString(30,150,210,16,16,tbuf);sprintf((char*)tbuf,Local Port:%d,UDP_DEMO_PORT);//服务器端口号LCD_ShowString(30,170,210,16,16,tbuf); // sprintf((char*)tbuf,Remote IP:%d.%d.%d.%d,lwipdev.remoteip[0],lwipdev.remoteip[1],lwipdev.remoteip[2],lwipdev.remoteip[3]);//远端IP // LCD_ShowString(30,170,210,16,16,tbuf); // sprintf((char*)tbuf,Remote Port:%d,UDP_DEMO_PORT);//客户端端口号 // LCD_ShowString(30,190,210,16,16,tbuf);POINT_COLORBLUE;LCD_ShowString(30,210,210,16,16,STATUS:Disconnected); UDP客户端连接不需要指定IP地址和端口号的服务器 udppcbudp_new();if(udppcb)//创建成功{ IP4_ADDR(rmtipaddr,lwipdev.remoteip[0],lwipdev.remoteip[1],lwipdev.remoteip[2],lwipdev.remoteip[3]);errudp_bind(udppcb,IP_ADDR_ANY,UDP_DEMO_PORT);//绑定本地IP地址与端口号if(errERR_OK) //绑定完成{udp_recv(udppcb,udp_demo_recv,NULL);//注册接收回调函数 LCD_ShowString(30,210,210,16,16,STATUS:Connected );//标记连接上了(UDP是非可靠连接,这里仅仅表示本地UDP已经准备好)udp_demo_flag | 15; //标记已经连接上POINT_COLORRED;LCD_ShowString(30,230,lcddev.width-30,lcddev.height-190,16,Receive Data:);//提示消息 POINT_COLORBLUE;//蓝色字体}else res1; }else res1;UDP回调函数 void udp_demo_recv(void *arg,struct udp_pcb *upcb,struct pbuf *p,struct ip_addr *addr,u16_t port) {u32 data_len 0;struct pbuf *q;if(p!NULL) //接收到不为空的数据时{memset(udp_demo_recvbuf,0,UDP_DEMO_RX_BUFSIZE); //数据接收缓冲区清零for(qp;q!NULL;qq-next) //遍历完整个pbuf链表{//判断要拷贝到UDP_DEMO_RX_BUFSIZE中的数据是否大于UDP_DEMO_RX_BUFSIZE的剩余空间如果大于//的话就只拷贝UDP_DEMO_RX_BUFSIZE中剩余长度的数据否则的话就拷贝所有的数据if(q-len (UDP_DEMO_RX_BUFSIZE-data_len)) memcpy(udp_demo_recvbufdata_len,q-payload,(UDP_DEMO_RX_BUFSIZE-data_len));//拷贝数据else memcpy(udp_demo_recvbufdata_len,q-payload,q-len);data_len q-len; if(data_len UDP_DEMO_RX_BUFSIZE) break; //超出TCP客户端接收数组,跳出 }upcb-remote_ip*addr; //记录远程主机的IP地址upcb-remote_portport; //记录远程主机的端口号lwipdev.remoteip[0]upcb-remote_ip.addr0xff; //IADDR4lwipdev.remoteip[1](upcb-remote_ip.addr8)0xff; //IADDR3lwipdev.remoteip[2](upcb-remote_ip.addr16)0xff;//IADDR2lwipdev.remoteip[3](upcb-remote_ip.addr24)0xff;//IADDR1 udp_demo_flag|16; //标记接收到数据了pbuf_free(p);//释放内存}else{udp_disconnect(upcb); LCD_Clear(WHITE); //清屏POINT_COLOR RED;LCD_ShowString(30,30,200,16,16,WARSHIP STM32F103);LCD_ShowString(30,50,200,16,16,UDP Test);LCD_ShowString(30,70,200,16,16,ATOMALIENTEK);POINT_COLORBLUE;LCD_ShowString(30,90,200,16,16,Connect break); LCD_ShowString(30,110,200,16,16,KEY1:Connect);udp_demo_flag ~(15); //标记连接断开} }实验结果 单播发送一对一发送 if(key KEY0_PRES)//KEY0按下了,发送数据{u8 remote_add[4] {192,168,1,36}; //发送对端的ip地址u8 send_str_data[] hello word!; //要发送的信息Unicast_Send(remote_add,send_str_data,0,8089);//单播发送}我按键按下KEY0_PRES按了三次发送单播发送的端口号为8089用 Wireshark 抓包 也可以用网络调试助手查看是否收到STM32发来的数据刚刚前面说过我设置自己的电脑ip192.168.1.36电脑本机端口号设置和STM32单片机发送数据端口号一致才能收到数据 广播发送一对多发送 if(key KEY2_PRES)//KEY2按下了,发送数据{u8 send_data[8] {0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8}; //要发送的信息Broadcast_Send(send_data,8,8080);//广播发送}我按键按下KEY2_PRES按了两次发送广播发送的端口号为8080用 Wireshark 抓包 也可以用网络调试助手查看是否收到STM32发来的数据电脑本机端口号端口号设置和STM32单片机发送数据端口号一致才能收到数据因为我刚刚设置STM32广播发送的端口号是8080所以本地端口号8089是不会收到数据的重新打开一个网络调试助手(端口号设置为8080)此时就可以正常收到数据了 没有 TFT显示屏 可以使用串口来查看单片机是否收到 别的单片机发来的数据 if(udp_demo_flag16)//是否收到数据?{LCD_Fill(30,250,lcddev.width-1,lcddev.height-1,WHITE);//清上一次数据LCD_ShowString(30,250,lcddev.width-30,lcddev.height-230,16,udp_demo_recvbuf);//显示接收到的数据 printf(接收到数据%s\r\n,udp_demo_recvbuf);udp_demo_flag~(16);//标记数据已经被处理了.} 可能遇到的问题 移植不成功不会将F1例程移植到F4板子上之类的问题移植不会修改程序没有设置自己的电脑ip地址程序、STM32单片机、网线都没有问题但电脑没有收到包此时检查电脑的防火墙端口号不一致也收不到包的 (这一点很重要)端口号要一致才能收发数据其它等等问题 总结 本人也花了大量时间去研究如需要源码支付30元提供技术服务加企鹅号970484728加企鹅时备注STM32 UDP不需要源码的也不强求记录下自己的学习过程我只是刚入门的新手知道有许多会的大佬不喜勿喷欢迎各位小伙伴一起前来讨论。
http://www.yutouwan.com/news/65088/

相关文章:

  • 网站开发实例pdf谈谈如何建设企业人力资源网站
  • 学做美食的视频网站有哪些音乐播放网站开发pc端
  • php 上传移动到网站根目录南京网站排名提升
  • 布朗新风 中企动力提供网站建设石家庄开发网站
  • 建设99网站东莞百度搜索排名优化
  • 怎么用网站做word文件网络工程学什么
  • 大学学部网站建设工作基于站点的推广
  • 知名的网站建设公司排名简历制作专业模板
  • 团购网站模板下载租赁模板建站 网站的名称归属
  • 网站推广排名优化多少钱dede购物网站
  • 制作简历模板网站安卓版网页制作软件
  • seo网站架构设计国外儿童社区网站模板
  • 义务 网站建设做外贸的网站平台有哪些
  • 网站搭建的费用虚拟机怎么做多个网站
  • 网站交互方式2022年适合小学生的新闻
  • 最新军事新闻报道深圳博惠seo
  • wordpress企业建站视频seo网站的优化方案
  • 口腔医院东莞网站建设自己有网站 做app
  • dns网站卫士 收录无锡营销型网站价格
  • 网站设计 原型图浙江省住房城乡建设厅网站
  • 做网站需要服务器么美团网站界面设计
  • 诗人做的网站院网站建设情况报告
  • 网站设计标准字体南昌集团网站建设公司
  • 无版权图片做网站绵阳做网站的有哪些
  • 宁波网站建设流程图网站建设实训报告册
  • 租用网站空间网站开发demo是什么
  • 信阳网站公司企业展厅设计要点
  • wordpress站内信wordpress控制列表页
  • 江阴营销网站建设网站建设报价选兴田德润
  • 给自己的公司做网站怎么做好北京网站制作公司有哪些