LwIP之UDP发送和接收Demo

发布者:火星最新更新时间:2022-07-12 来源: csdn关键字:LwIP 手机看文章 扫描二维码
随时随地手机看文章

使用RT-Thread Studio基于rt-thread4.0.2构建的工程:


这里记录一下最基本的收发代码。


/*

 * Copyright (c) 2006-2019, RT-Thread Development Team

 *

 * SPDX-License-Identifier: Apache-2.0

 *

 * Change Logs:

 * Date           Author       Notes

 * 2020-02-20     ShineRoyal   the first version

 */



#include

#include

#include

#include


static const char *send_data = "GET /download/rt-thread.txt HTTP/1.1rn"

        "Host: www.rt-thread.orgrn"

        "User-Agent: rtthread/4.0.1 rttrnrn";


void udpclient(int argc, char **argv)

{

    int sock, port, count;

    struct hostent *host;

    struct sockaddr_in send_addr, recv_addr;

    const char *url;


    /* 接收到的参数小于 3 个 */

    if (argc < 3)

    {

        rt_kprintf("Usage: udpclient URL PORT [COUNT = 10]n");

        rt_kprintf("Like: tcpclient 192.168.12.44 5000n");

        return;

    }


    url = argv[1];

    port = strtoul(argv[2], 0, 10);


    if (argc > 3)

        count = strtoul(argv[3], 0, 10);

    else

        count = 10;


    /* 通过函数入口参数 url 获得 host 地址(如果是域名,会做域名解析) */

    host = (struct hostent *) gethostbyname(url);


    /* 创建一个 socket,类型是 SOCK_DGRAM,UDP 类型 */

    if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)

    {

        rt_kprintf("Socket errorn");

        return;

    }


    /* 初始化预连接的服务端地址 */

    send_addr.sin_family = AF_INET;

    send_addr.sin_port = htons(port);

    send_addr.sin_addr = *((struct in_addr *) host->h_addr);

    rt_memset(&(send_addr.sin_zero), 0, sizeof(send_addr.sin_zero));


    recv_addr.sin_family = AF_INET;

    recv_addr.sin_port = IPADDR_ANY;

    recv_addr.sin_addr = *((struct in_addr *) host->h_addr);

    rt_memset(&(recv_addr.sin_zero), 0, sizeof(recv_addr.sin_zero));


    /* 总计发送 count 次数据 */

    while (count)

    {

        /* 发送数据到服务远端 */

        sendto(sock, send_data, strlen(send_data), 0, (struct sockaddr * )&send_addr, sizeof(struct sockaddr));


        /* 线程休眠一段时间 */

        rt_thread_delay(50);



        char str[100];

        memset(str, 0, sizeof(str));

        recvfrom(sock, str, sizeof(str), 0, &recv_addr, sizeof(recv_addr));

        rt_kprintf("%s:%d=>%sn", inet_ntoa(recv_addr.sin_addr), ntohs(recv_addr.sin_port), str);


        /* 计数值减一 */

        count--;

    }


    /* 关闭这个 socket */

    closesocket(sock);

}

MSH_CMD_EXPORT(udpclient, udpclient);


收发情况如下:

在这里插入图片描述

关键字:LwIP 引用地址:LwIP之UDP发送和接收Demo

上一篇:LwIP之TCP Client发送和接收Demo
下一篇:HAL库使用修改为外部25M晶振

推荐阅读最新更新时间:2024-11-11 11:13

RT-Thread中Lan8720和lwip协议栈的使用
开发环境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,stm32f4的资源包为0.2.2,Agile Modbus软件包版本为v1.1.2。新建选择芯片工程。 修改工程使用外部晶振,可参考第一篇文章 rt-thread studio新建stm32f407工程 。 查看野火工程的资料,可知道芯片的使用引脚为: PG11 : RMII_TX_EN; PG13 : RMII_TXD0; PG14 : RMII_TXD1; PC5 : RMII_RXD1; PC4 : RMII_RXD0; PA7 : RMII_CRSDV; PA1 : RMII_REF_CLK; PC1 : RMII_MD
[单片机]
RT-Thread中Lan8720和<font color='red'>lwip</font>协议栈的使用
stm32+lwip的物联网开发——学习过程(1)
由于一个IOT的项目,顺理成章地学习stm32+lwip。本来先学stm32可能会好一些,但时间原因,只能一起上了。 在看过一次视频教程,自己亲自移植了一次后,所谓“例程”一直没有成功。终于在这一刻,UCOS下终于ping通,也自己写了一个点灯的实验成功了。真正感觉自己做了点什么事,而且对于lwip,至少是最基本的lwip,还有stm32的简单应用有了初步了解。 stm32在无操作系统时,在入口函数中配好时钟参数后,进行各类初始化之后,就开始跑一个lwip_periodic_handle的函数,死循环。是一个广播函数。 在有操作系统时,直接开启os task和os, 其他的功能全在中断回调里面。 void LwIP
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved