LPC1768 UDP_Client 发送数据+测网速

在实验室学习需要用到UDP,而开发板上的例程要不就是基于RT-thread操作系统的,要不就是基于TCP的demo,没有UDP的裸机程序。然后在开发板ping例程的基础上,添加从网上找的udpclient.c代码,生成LPC1768 UDP_Client代码。而刚开始的udpclient.c的程序是在网络调试助数据发送区中输入任何数据,就能回显到数据接收区,这不是我想要的结果。然后查阅资料发现在udpclient.c中的IP设置时,IP4_ADDR( &DestIPaddr, 192,168, 1, 40 );需要设置上位机的IP地址而不是开发板的IP地址,我这里设置的192.168.1.40,然后本地端口号设置为8080。本来在udpclient.代码中是将所有的功能都放在void udp_echoclient_connect(void);这个函数综中的,我现在注释掉其中的大部分代码,并重新写一个发送数据的函数void udp_send_data(void)。这样在主函数中while(1)中就可以一直向上位机发送数据。接着为了测试网络速度我在udpclient.c中定义了发送需要发送的数据const char   data[1024] = "LPC1768 UDP_Client\r\n"。以上设置好了以后打开网络调试助手并设置协议类型为UDP,本地IP地址为192.168.1.40,本地端口号为8080,这些与代码中的配置一样。综上所述这样就是实现了UDP_Client  发送数据+测试网速。以下是代码:

1、udpclient.c代码

#include "lpc17xx.h"
#include "lwip/pbuf.h"
#include "lwip/udp.h"
#include "lwip/tcp.h"
#include <string.h>
#include <stdio.h>


void udp_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip_addr *addr, u16_t port);
void udp_send_data(void);
const char   data[1024] = "LPC1768 UDP_Client\r\n";
__IO uint32_t message_count = 0;


  struct udp_pcb *upcb;
  struct pbuf *p;
//set connect
void udp_echoclient_connect(void)
{


  struct ip_addr DestIPaddr;
  err_t err;
       
  /* Create a new UDP control block  */
  upcb = udp_new();
  
 // if (upcb!=NULL)
  //{
    /*assign destination IP address */
    IP4_ADDR( &DestIPaddr, 192,168, 1, 40 );// set IP,it¡®s computer's IP,not  board.
  
    /* configure destination IP address and port */
    err= udp_connect(upcb, &DestIPaddr, 8080);
    
 //   if (err == ERR_OK)
 //   {
      /* Set a receive callback for the upcb */
   //   udp_recv(upcb, udp_receive_callback, NULL);
      
 //     sprintf((char*)data, "sending udp client message %d", (int*)message_count);
  
      /* allocate pbuf from pool*/
  //    p = pbuf_alloc(PBUF_TRANSPORT,strlen((char*)data), PBUF_POOL);
      
  //    if (p != NULL)
   //   {
  //      /* copy data to pbuf */
  //      pbuf_take(p, (char*)data, strlen((char*)data));
          
        /* send udp data */
   //     udp_send(upcb, p); 
        
        /* free pbuf */
   //     pbuf_free(p);
   //   }
   //   else
   //   {
   //     #ifdef SERIAL_DEBUG
  //       printf("\n\r can not allocate pbuf ");
  //      #endif
   //   }
 //   }
 //   else
  //  {
   //   #ifdef SERIAL_DEBUG
   //   printf("\n\r can not connect udp pcb");
 //     #endif
//    }
//  }
 // else
  //{
  //  #ifdef SERIAL_DEBUG
  //   printf("\n\r can not create udp pcb");
   // #endif
 // } 

}

//发送函数

void udp_send_data(void)
{
/* allocate pbuf from pool*/
p = pbuf_alloc(PBUF_TRANSPORT,strlen((char*)data), PBUF_POOL);
  /* copy data to pbuf */
  pbuf_take(p, (char*)data, strlen((char*)data));
/* send udp data */
udp_send(upcb, p); 
/* free pbuf */
pbuf_free(p);
}
void udp_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip_addr *addr, u16_t port)
{


  /*increment message count */
  message_count++;
/* send udp data */
udp_send(upcb, p);


/* free pbuf */
pbuf_free(p);

  /* free the UDP connection, so we can accept new clients */
  //udp_remove(upcb);   
}

2、main.c代码

#include "lpc17xx.h"
#include "emac.h"
#include "netconf.h"
#include "udp.h"
#include <string.h>
#include <stdio.h>

extern void udp_echoclient_connect(void);

extern void udp_send_data(void);


void Delay (uint32_t Time)
{
    uint32_t i;
    
    i = 0;
    while (Time--) {
        for (i = 0; i < 5000; i++);
    }
}
int main(void)
{
    SystemInit();                                                           

    LwIP_Init();

    udp_echoclient_connect()

    while (1) 
{
udp_send_data();
//Delay(100);

}

初学ARM,还是跑的裸机。其中一些函数没弄明白,还需要学习,还望批评指正。最后感谢在网上传播知识的网友们,我是站在你们的肩膀上学习的,感谢你们。最后实验证明测网速的时候要加上系统,不要裸机去测试网速。我的裸机测得网速是14Mbps而加上系统的话就能达到37Mbps。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值