Lwip Echo Server

Lwip Echo Server


Lwip Echo Server 对通过网络发送到程序的输入进行回声。

RAW API

RAW API为应用程序提供了一个回调样式的接口。对于使用RAW API寄存器回调的应用程序,在接收、读或写等重要事件时调用这些函数。基于RAW api的回显服务器是单线程的,所有的工作都在回调函数中完成。主应用程序循环结构如下:
在这里插入图片描述
TcpFastTmrFlag和TcpSlowTmrFlag是TCP TX处理所必需的,分别在Timer处理程序中每250毫秒和500毫秒设置一次。
应用程序循环的功能是不断地接收数据包(xemacif_input),然后将它们传递给IwIP。在进入这个循环之前,回显服务器设置了一些回调:
在这里插入图片描述
这个调用序列创建一个TCP连接,并在被接受的连接上设置一个回调。当接受连接请求时,异步调用函数accept_callback。因为echo服务器只需要在接收到数据时进行响应,所以accept回调函数通过执行以下命令来设置receive回调:在这里插入图片描述
当接收到一个数据包时,调用函数recv_callback。函数将接收到的数据回传给发送方:
在这里插入图片描述
尽管RAW API比套接字API更复杂,但它提供了更高的吞吐量,因为它没有很高的开销。

### lwIP Echo Server 实现概述 lwIP 是一个轻量级的 TCP/IP 协议栈,广泛应用于嵌入式系统中。通过 lwIP 实现一个简单的 Echo Server 是学习网络编程和协议栈使用的一个良好实践[^1]。以下是一个基于 lwIPEcho Server 示例代码实现。 ### 示例代码:lwIP Echo Server 以下代码展示了一个使用 lwIP 的简单 Echo Server 实现。此服务器会接收客户端发送的数据,并将其原样返回给客户端。 ```c #include "lwip/opt.h" #include "lwip/sys.h" #include "lwip/tcp.h" #include "lwip/netif.h" #define PORT 7 // Echo service port static void echo_server_connection_cleanup(void *arg, struct tcp_pcb *pcb) { tcp_arg(pcb, NULL); tcp_sent(pcb, NULL); tcp_recv(pcb, NULL); tcp_err(pcb, NULL); tcp_poll(pcb, NULL, 0); tcp_close(pcb); } static err_t echo_server_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) { if (!p) { echo_server_connection_cleanup(arg, pcb); return ERR_OK; } // Send the received data back to the client tcp_write(pcb, p->payload, p->len, TCP_WRITE_FLAG_COPY); // Free the received buffer pbuf_free(p); return ERR_OK; } static err_t echo_server_accept(void *arg, struct tcp_pcb *newpcb, err_t err) { if (err != ERR_OK) { return err; } tcp_arg(newpcb, arg); tcp_recv(newpcb, echo_server_recv); return ERR_OK; } void start_echo_server(void) { struct tcp_pcb *pcb; pcb = tcp_new(); if (!pcb) { return; } err_t err = tcp_bind(pcb, IP_ADDR_ANY, PORT); if (err != ERR_OK) { tcp_close(pcb); return; } pcb = tcp_listen(pcb); if (!pcb) { return; } tcp_accept(pcb, echo_server_accept); } ``` ### 关键点说明 1. **端口选择**:Echo 服务通常运行在端口 7 上,因此代码中定义了 `PORT` 为 7。 2. **数据接收与发送**:`echo_server_recv` 函数负责接收来自客户端的数据并将其原样返回给客户端。 3. **连接清理**:当客户端关闭连接时,`echo_server_connection_cleanup` 函数会释放相关资源。 4. **启动服务器**:`start_echo_server` 函数初始化并启动 Echo Server。 ### 注意事项 - lwIP 提供了多种配置选项以优化内存使用和性能。在实际应用中,可以根据需求调整这些选项[^1]。 - 在嵌入式环境中,确保硬件资源(如 RAM 和 CPU)足够支持 lwIP 的运行。 - 使用 lwIP 时需要注意其线程安全性和事件驱动模型的设计[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值