书籍:《嵌入式网络那些事-lwip协议》

udp协议的优点:

1)基于IP协议,无连接的用户数据报协议,适用于传送大批量数据,

2)实时性比较高,适用于嵌入式网络

发送函数:udp_send    udp_sendto 两个函数都可以用来发送报文,后者指定发送的目的ip地址,前者需要通过与ip层交互,获取有效的ip地址,然后调用后者完成数据的发送。

udp_sendto通过调用函数udp_sendto_if完成报文的组装和发送,在调用udp_sendto_if之前,与IP层进行交互操作,机调用ip_route为报文寻找一个网络接口结构,这个结构记录了整个系统的有效IP地址

报文接收函数

udp_input被调用处理报文,主要进行报文合法性检测,根据报文端口信息查找匹配的UDP控制块,并把报文数据递交给控制块中注册的用户自定义函数处理。

udp编程接口,采用回调函数的方式,优点-编程简单,只需要绑定对应IP和端口后,编写自己的处理函数,然后通过udp_recv函数注册用户的回调函数。不过采用回调方式编程存在缺陷,用户应用程序和协议栈内核处于同一进程中,用户程序通过回调的方式执行,在用户程序执行的过程中,内核进程处于阻塞状态,如果用户程序比较大,处理时间较长,协议栈内核代码得不到执行,协议栈接收,处理新数据包效率会受到直接的影响。最严重的后果,如果发送方的数据包发送速率很快,协议栈会因为来不及处理而出现丢包的情况。

/**************************************************************************/

回调方式编程的基本框架:

系统时钟更新

SystemCoreClockUpdate();

初始化mac层,

Chip_ENET_Init(LPC_ETHERNET);

使能系统滴答定时器

SysTick_Enable(1);

初始化lwip协议栈

lwip_init();

初始化本机ip

IP4_ADDR(&gw, 192,168,1,1);//网关地址
 IP4_ADDR(&ipaddr, 192,168,1,37);//本机IP地址
 IP4_ADDR(&netmask, 255, 255, 255, 0);//子网掩码

注册网络接口

netif_add(&lpc_netif, &ipaddr, &netmask, &gw, NULL, lpc_enetif_init,ethernet_input);
 netif_set_default(&lpc_netif);
 netif_set_up(&lpc_netif);

启动DHCP功能

dhcp_start(&lpc_netif);

申请一个UDP控制块

upcb = udp_new();

绑定到本地端口
 udp_bind(upcb,IP_ADDR_ANY,UDP_ECHO_PORT);

注册用户报文处理函数
 udp_recv(upcb,udp_demo_callback,NULL);

lwip协议栈学习---udp的更多相关文章

  1. LwIP协议栈规范翻译——摘要目录

    摘要 LwIP是一种TCP/IP协议栈的实现.LwIP协议栈专注于减少内存的使用和代码的大小,使LwIP适用于嵌入式系统中在有限的资源下能够使用小型的客户机.为了减少处理和内存的需求,LwIP使用裁剪 ...

  2. 1、 LwIP协议栈规范翻译——简介

    1.简介 在过去几年中,计算机和计算机支持设备接之间的互联到无线网络日趋增加.计算机已经越来越无缝的集成在了日常的设备且价格也在下降.同时,无线网络技术例如蓝牙[HNI+98]和IEEE802.11b ...

  3. 一种基于uCos-II操作系统和lwIP协议栈的IEEE-1588主站以及基于该主站的报文处理方法

    主站以及应用于电力系统的支持IEEE‐1588协议的主时钟(IEEE‐1588主站)的实现方法.该方法是在一个低成本的硬件平台上,借助uCos‐II操作系统和TCP/IP的协议栈,对以太网数据进行了分 ...

  4. LwIP应用开发笔记之二:LwIP无操作系统UDP服务器

     前面我们已经完成了LwIP协议栈基于逻辑的基本移植,在这一节我们将以RAW API来实现UDP服务器. 1.UDP协议简述 UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包, ...

  5. 网络协议栈学习(一)socket通信实例

    网络协议栈学习(一)socket通信实例 该实例摘自<linux网络编程>(宋敬彬,孙海滨等著). 例子分为服务器端和客户端,客户端连接服务器后从标准输入读取输入的字符串,发送给服务器:服 ...

  6. LwIP协议栈开发嵌入式网络的三种方法分析

    LwIP协议栈开发嵌入式网络的三种方法分析   摘要  轻量级的TCP/IP协议栈LwIP,提供了三种应用程序设计方法,且很容易被移植到多任务的操作系统中.本文结合μC/OS-II这一实时操作系统,以 ...

  7. 基于Lwip协议栈中独立模式下回调函数的使用

    一.使用Lwip协议独立模式开发 最近在STM32F4上边移植了Lwip,Lwip是一个小型开源的TCP/IP协议栈,有无操作系统的支持都可以运行.我当前只测试了TCP Server功能,然后对TCP ...

  8. Linux 内核协议栈 学习资料

    终极资料 1.<Understanding Linux Network Internals> 2.<TCP/IP Architecture, Design and Implement ...

  9. 3、LwIP协议栈规范翻译——概述

    3.概述 像许多其他TCP/IP实现一样,分层协议设计已经成为设计lwIP实现的指南.每个协议实现为自己的模块,其中几个功能充当每个协议的入口点.尽管协议层是单独实现的,一些层却不全是,正如前面所叙述 ...

随机推荐

  1. ssh登录locale报错:cannot change locale (zh_CN.UTF-8): No such file or directory

    一.登录ssh报错: Last :: from 172.28.146.109 -bash: warning: setlocale: LC_ALL: cannot change locale (en_C ...

  2. margin居中显示

    标签(空格分隔): margin居中 margin居中: 如下图的代码查看: <!DOCTYPE html> <html lang="en"> <he ...

  3. java中mysql查询报错java.sql.SQLException: Before start of result set

    异常:java.sql.SQLException: Before start of result set 解决方法:使用rs.getString();前一定要加上rs.next(); sm = con ...

  4. 报错:The import android.support cannot be resolved

    下一个android-support-v7-appcompat.jar 然后导入即可 :

  5. Python学习笔记十_模块、第三方模块安装、模块导入

    一.模块.包 1.模块 模块实质上就是一个python文件.它是用来组织代码的,意思就是把python代码写到里面,文件名就是模块的名称,test.py test就是模块的名称 2.包 包,packa ...

  6. 内置函数-fliter

    def is_odd(x): return x % 2 == 1 ret = filter(is_odd, [1,4,6,7,9]) print(ret) for i in ret: print(i) ...

  7. c# 判断当前版本是Debugger或Release

    1.第一种 (常用) #if DEBUG //debugger 环境 #else //release 环境 #endif 2. 第二种 private bool IsDebug() { Assembl ...

  8. mysql 中启动服务的命令 、登录命令、退出命令 mysql 的常用命令

    1.cmd 以管理员执行 下面命令 启动服务 :net start mysql57 关闭 服务:net stop mysql57 查看mysql 的版本信息 : mysql -V 指定主机地址登录: ...

  9. JVM、垃圾收集器

    1.Java虚拟机原理 所谓虚拟机,就是一台虚拟的机器.他是一款软件,用来执行一系列虚拟计算指令,大体上虚拟机可以分为系统虚拟机和程序虚拟机, 大名鼎鼎的Vmare就属于系统虚拟机,他完全是对物理计算 ...

  10. swift 导入 .a 和 .h 文件

    一.新建桥接文件,这个很简单,就不介绍了.给个链接方法吧. 二.添加导入 .a 文件,在最后一步选择要导入的 .a 文件. 三.桥接文件里引用头文件,一般 .a 和 .h 文件都是在一个文件夹一起拖入 ...