LWIP+TCP服务器

news/2024/9/24 11:02:36/

 一、完整代码

tcp_server.c

#include "tcp_server.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>void Tcp_Server_Init(void)
{struct tcp_pcb *tcp_server_pcb;/* 为tcp服务器分配一个tcp_pcb结构体    */tcp_server_pcb = tcp_new();/* 绑定本地端号和IP地址 */tcp_bind(tcp_server_pcb, IP_ADDR_ANY, 8080);/* 监听之前创建的结构体tcp_server_pcb */tcp_server_pcb = tcp_listen(tcp_server_pcb);/* 初始化结构体接收回调函数 */tcp_accept(tcp_server_pcb, tcp_server_accept);
}static err_t tcp_server_accept(void *arg, struct tcp_pcb *pcb, err_t err)
{/* 配置接收回调函数 */tcp_recv(pcb, tcp_server_recv);return ERR_OK;
}static err_t tcp_server_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *tcp_recv_pbuf, err_t err)
{struct pbuf *tcp_send_pbuf;if (tcp_recv_pbuf != NULL){/* 扩大收发数据的窗口 */tcp_recved(pcb, tcp_recv_pbuf->tot_len);/* 将接收的数据拷贝给发送结构体 */tcp_send_pbuf = tcp_recv_pbuf;/* 将接收到的数据再转发出去 */tcp_write(pcb, tcp_send_pbuf->payload, tcp_send_pbuf->len, 1);pbuf_free(tcp_recv_pbuf);}return ERR_OK;
}

tcp_server.h

#ifndef __TCP_SERVER_H
#define __TCP_SERVER_H#include "lwip/debug.h"
#include "lwip/stats.h"
#include "lwip/tcp.h"
#include "lwip/memp.h"
#include "lwip/mem.h"
#include "lwip_comm.h"void Tcp_Server_Init(void);
static err_t tcp_server_accept(void *arg, struct tcp_pcb *pcb, err_t err);
static err_t tcp_server_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *tcp_recv_pbuf, err_t err);#endif

二、注意事项

运行一个之前已经成功的客户端代码时,如果出现设备从客户端到服务器的转变,他们会出现长时间的ping不通的情况,那么就再次执行一次下面改变主机的步骤,然后按一下复位,再次运行,就可以正常通信。


http://www.ppmy.cn/news/1452996.html

相关文章

Linux内核--设备驱动(五)USB Gadget梳理

目录 一、引言 二、USB ------>2.1、USB设备的接入 ------>2.2、USB设备枚举 ------>2.3、UAC设备 ------>2.4、UVC设备 ------>2.5、USB 主机控制器及OTG实现方式 ------>2.6、USB HOST之EHCI和OHCI与对应的dts节点及驱动 ------>2.7、USB设备接…

ApiHug 官方站点

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplacehttps://…

华为机考入门python3--(21)牛客21- 简单密码

分类&#xff1a;字符串 知识点&#xff1a; 字符的Unicode码 num ord(my_char) 一个整数转换为一个对应的 ASCII 字符 my_char chr(num) 题目来自【牛客】 import sysdef transform_password(password):result ""for char in password:if a < char…

微图乐 多种装B截图一键制作工具(仅供娱乐交流)

软件介绍 采用exe进程交互通信。全新UI界面&#xff0c;让界面更加清爽简约。支持zfb、VX、TX、Yin行、Dai款、游戏等图片生成&#xff0c;一键超清原图复制到剪辑板&#xff0c;分享给好友。适用于提高商家信誉度&#xff0c;产品销售额度。装逼娱乐&#xff0c;用微图乐。图…

考研入门55问---基础知识篇

考研入门55问---基础知识篇 01 &#xff1e;什么是研究生入学考试&#xff1f; 研究生是指大专和本科之后的深造课程。以研究生为最高学历, 研究生毕业后&#xff0c;也可称研究生&#xff0c;含义为研究生学历的人。在中国大陆地区&#xff0c;普通民众一般也将硕士毕业生称…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-11.1,11.2-BSP文件目录组织

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

期权交割对股市是好是坏?2024期权交割日一览表

期权交割是指期权买方在期权合约到期日或之前行使期权&#xff0c;卖方履行义务&#xff0c;按照约定的价格和数量与期权卖方进行标的物的买卖或现金结算的过程。 交割方式 期权交割可以分为实物交割和现金交割&#xff0c;具体取决于合约规定。 实物交割 实物交割是指期权买…

arm 交叉编译 thumb 与 arm 指令的方法

arm 交叉编译 thumb 与 arm 指令的方法 本文实现了在 x86 的 ubuntu 的机器上&#xff0c;使用 arm-linux-gnueabihf-gcc 交叉编译链工具&#xff0c;编译出在 arm 开发板上可以运行的 thumb 指令集的可执行文件。后续会使用 vscode 使用网络进行远程调试。 1. 编译器 arm-li…