Zynq学习_____以太网三部曲(二)LWip_UDP API函数

本文详细介绍了LwIP中UDP通信的相关函数,包括创建、绑定、连接、发送和接收等操作,帮助读者理解UDP通信的基本流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、udp_new()

该函数用于建立一个用于UDP通信的UDP控制块(pcb),但是这个pcb并没有被激活,除非该pcb已经被绑定到一个本地地址上或者连接到一个固定地址的远程主机。在定义一个udp_pcb控制块后该函数应该首先被调用,以建立该控制块的连接标志

功能

建立一个用于UDP通信的UDP控制块(pcb)

原型

struct udp_pcb *udp_new(void)

参数

返回

udp_pcb:建立的UDP连接的控制块(pcb)

2、udp_remove()

该函数用于删除一个指定的连接,通常是控制块在建立成功后,即在函数udp_new()调用之后,当不需要该网络连接来通信了,就需要将其删除,以释放该连接(pcb)所占用的资源。

功能

删除并释放掉一个udp_pcb

原型

void udp_remove(struct udp_pcb *pcb)

参数

pcb:指定要删除的连接(pcb)

返回

3、udp_bind()

该函数用户绑定本地的IP地址和端口号,用户可以将其绑定在一个任意的本地IP地址上,它也只能在函数udp_new()调用之后才能调用

功能

为指定的连接绑定本地IP地址和端口号

原型

err_t udp_bind(struct udp_pcb *pcb,

struct ip_addr *ipaddr,

u16_t port)

参数

pcb: 指定一个连接(pcb)

ipaddr:绑定的本地IP地址。如果为IP_ADDR_ANY,则将连接绑定到所有的本地IP地址上

port: 绑定的本地端口号。注意:千万不要和其它的应用程序产生冲突

返回

ERR_OK: 正确地绑定了指定的连接

ERR_USE: 指定的端口号已经绑定了一个连接,产生了冲突

4、udp_connect()

该函数将一个指定的连接(pcb)连接到远程主机。由于UDP通信是面向无连接的,所以这不会参数任何的网络流量(网络数据收发),它仅仅是设置了一个远程连接的IP地址和端口号。

功能

将参数“pcb”指定的连接控制块连接到远程主机

原型

err_t udp_connect(struct udp_pcb *pcb,

struct ip_addr *ipaddr,

u16_t port)

参数

pcb: 指定一个连接(pcb)

ipaddr:设置连接的远程主机IP地址

port: 设置连接的远程主机端口号

返回

ERR_OK:正确连接到远程主机

其它值: LwIP的一些错误代码标志,表示连接没有正确建立

5、udp_disconnect()

该函数关闭参数“pcb”指定的连接,同函数udp_connect()作用相反。由于UDP通信是面向无连接的,所以这个函数同样不会参数任何的网络流量((网络数据收发),它仅仅是删除了远程连接的地址

功能

关闭参数“pcb”指定的连接, 同函数udp_connect()作用相反

原型

void udp_disconnect(struct udp_pcb *pcb)

参数

pcb:指定要删除的连接(pcb)

返回

6、udp_send()

该函数使用UDP协议发送pbuf p指向的数据。在需要发送数据时调用,发送后,该pbuf结构并没有被释放。调用该函数后,数据包将被发送到存放在pcb中的当前指定的IP地址和端口号上。如果该pcb没有连接到一个固定的端口号,那么该函数将会自动随机地分配一个端口号,并将数据包发送出去。通常,在调用前都会先调用函数udp_connect()

功能

使用UDP协议发送pbuf p指向的数据

原型

err_t udp_send(struct udp_pcb *pcb, struct pbuf *p)

参数

pcb:指定发送数据的连接(pcb)

p: 包含需要发送数据的pbuf链

返回

ERR_OK:数据包成功发送,没有任何错误发生

ERR_MEM:内存不可用

ERR_RTE:不能找到到达远程主机的路由

其它值:其它的一些错误码,都表示发送了错误

7、udp_sendto()

该函数同udp_send()作用一样,但是它指定了发送的目的主机IP地址和端口号,相当于udp_connect()和函数udp_send()合在一起使用的效果。但是,如果在调用该函数前已经调用过函数udp_connect(),那么发送目的主机的IP地址和端口号将以本函数指定的为准,由函数udp_connect()指定的将会被刷新

功能

向具有指定的IP地址和端口号远程主机发送UDP数据

原型

err_t udp_sendto(struct udp_pcb *pcb,

struct pbuf *p,

struct ip_addr *dst_ip,

u16_t dst_port)

参数

pcb: 指定发送数据的连接(pcb)

p: 包含需要发送数据的pbuf链

dst_ip:发送数据的远程主机IP地址

dst_port:发送数据的远程主机端口号

返回

同函数udp_send()的返回值一样

8、udp_recv()

该函数用于指定当有新的UDP数据接收到时被调用的回调函数,回调函数将的参数将传递进远程主机的IP地址、端口号及接收到的数据等信息

功能

指定一个接收到UDP数据包时被调用的回调函数

原型

void udp_recv(struct udp_pcb *pcb,

void (* recv)(void *arg,

struct udp_pcb *upcb,

struct pbuf *p,

struct ip_addr *addr,

u16_t port),

void *recv_arg)

参数

pcb: 指定一个连接(pcb)

recv: 指定数据包接收到时的回调函数

recv_arg:传递给回调函数的参数

返回

### 测量ZYNQ平台上以太网UDP传输速率 为了测量ZYNQ平台上的以太网UDP传输速率,通常采用特定的工具和方法来评估性能。这些工具不仅能够提供详细的统计信息,还能帮助识别潜在瓶颈。 #### 工具选择 1. **Iperf**: 这是一个广泛使用的网络性能测试工具,支持TCP和UDP流量生成以及带宽测量[^1]。通过配置不同的参数,可以在ZYNQ平台上运行客户端和服务端模式来进行双向通信测试。 2. **Netcat (nc)**: 虽然主要用于简单连接操作,但在某些情况下也可以用来发送和接收UDP数据包,并配合其他命令行工具计算吞吐量[^2]。 3. **自定义应用程序**: 对于更精确控制的需求,可以根据具体应用场景开发专门的应用程序,在其中集成LwIP库或其他轻量级TCP/IP栈实现定制化的UDP传输逻辑[^3]。 #### 方法概述 - 设置好硬件环境后,在目标板上部署所选工具; - 配置PC作为另一方参与节点,确保两者之间存在稳定可靠的物理链路连接; - 启动服务端监听指定端口等待来自客户端的数据流请求; - 客户端发起连接并向服务器持续发送预设大小的消息直到完成整个过程; - 记录下实际耗时及总字节数用于后续分析; 对于上述提到的`Iperf`, 可以按照如下方式启动: ```bash # 在服务端执行此命令开启监听 iperf -s -u -i 1 # 在客户端执行下面这条指令开始向远程主机传送数据 iperf -c <server_ip> -u -b 10M -t 10 ``` 以上命令中的选项解释: - `-s`: 表示当前机器作为Server角色工作. - `-u`: 明确指定了要使用的是UDP协议而非默认的TCP. - `-i 1`: 指定每隔一秒输出一次报告. - `<server_ip>`: 替换为目标服务器的实际IPv4地址. - `-b 10M`: 设定带宽上限为每秒10Mb/s, 用户可根据实际情况调整这个数值. - `-t 10`: 整个测试将持续十秒钟.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值