LWIP-TCP Server连接两次之后无法连接问题
如题,设备做TCP Server,通过调试助手连接设备,连接两次之后再次发起连接无法连接到设备。
其中,设备端之前使用stm32f207,之后改用GD32F407,网络使用DM9000,软件方案采用RTT+LWIP,使用st芯片无此现象,而GD有此问题。甚至出现网络无法初始化情况,之后通过增加上电复位延时时间,初始化无问题:
但出现新问题就是TCP连接两次之后连接不上,而单步却可以,通过wireshark抓包发现:
问题出在第三次握手,返回的报文却是挥手应答报文。
单步可以而全速运行不行的情况一般出现在时序上,而DM9000通过FSMC并行传输,之后通过在发送数据任务,通过加入一小段延时,问题得以解决。
据个人理解,应该是上一帧数据还没发送出去,下一帧就来了,然后下一帧数据未能发送出,保存在发送缓冲区中,之后经过下次触发发送时,将数据发送出。通过加入延时之后,确保上一帧数据发送出。
volatile void tx_ack_delay(void)
{volatile uint32_t i = 0xef;uint8_t a = 0;while(i--){a++;a++;a++;a++;a++;a++;}
}
static void eth_tx_thread_entry(void* parameter)
{struct eth_tx_msg* msg;rt_base_t temp_isr;while(1){if(rt_mb_recv(ð_tx_thread_mb, (rt_uint32_t*)&msg, RT_WAITING_FOREVER) == RT_EOK){struct eth_device* enetif;RT_ASSERT(msg->netif != RT_NULL);RT_ASSERT(msg->buf != RT_NULL);enetif = (struct eth_device*)msg->netif->state;if(enetif != RT_NULL){/* call driver's interface */if(enetif->eth_tx(&(enetif->parent), msg->buf) != RT_EOK){rt_kprintf("transmit eth packet failed\n");}}/********************加入发送延时***************************/rt_enter_critical(); //关闭调度器tx_ack_delay(); //延时小段时间rt_exit_critical(); //开调度器/* send ACK */rt_sem_release(&(enetif->tx_ack));}}
}
LWIP-TCP Server连接两次之后无法连接问题相关推荐
- 两个html如何连接,两个路由器怎么连接图解设置
问:两(2)个路由器怎么连接才能够上网?有没有两(2)个路由器连接图片? 答:如果想把两个路由器连接起来上网,连接方法有2种:1.无线连接:2.有线连接.下面本文进行详细的介绍说明. 注意问题: (1 ...
- 计算机网络两个路由连接,两个路由器怎么连接如何设置才能同时上网的方法教程...
为什么要2个路由器连接起来呢?1个是由于电脑多了网线插口不够用,2个是如果是无线路由器可以让更大的空间可以收到无线信号上网,下面主要介绍有线连接的方式. 需要的设备:原来的路由器,新买的路由器 第一种 ...
- Oracle 多表查询 --笛卡尔集--左连接--右连接--1999 语法--满外连接
Oracle 多表查询总结 笛卡尔集现象: 笛卡尔集会在下面条件下产生: – 省略连接条件 – 连接条件无效 – 所有表中的所有行互相连接 为了避免笛卡尔集, 可以在where加入有效的连接条件. O ...
- gns3中两个路由器分别连接主机然后分析ip数据转发报文arp协议_关于TCP/IP,必知必会的十个问题!...
本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养. TCP/IP十个问题 TCP/IP十个问题 一.TCP/IP模型 TCP/IP协议模型(Trans ...
- python与sql连接不上_Python连接不上SQL Server的两种根治思路
连接不上数据库,首先可以排除是代码的问题,连接方式都是千篇一律的. 大多数问题都是本机的两个原因造成的,1.服务没有开启,2.没有启动SQL配置的TCP/IP 下面给出统一解决方案: 首先从开始菜单找 ...
- nodejs TCP server和TCP client如何建立连接
首先客户端和服务器端通信得需要一个消息结构,我用如下的构造函数创建一个消息结构,包含消息正文和消息类型(method): function message(_data,_method = '') {_ ...
- 网络调试助手TCP server不能成功连接
<第一次写博客,开始打算记录学习路上的问题,以方便巩固和讨论,还请多多包涵> 正文: 在使用网络调试助手时,想一个建立TCP server,一个建立TCP client,两者之间进行通信, ...
- SQL server 两台服务器间连接查询
--两台服务器间连接查询: --建立连接: sp_addlinkedserver hs sp_addlinkedserver hs1 EXEC sp_addlinkedsrvlogin 'hs', ' ...
- stm32 网络 服务器通信协议,利用stm32的lwip TCP/IP协议栈的通信的思路
利用stm32f103vet6作为平台,enc28j60网卡,lwip tcp/ip作为协议栈进行相应的程序编写. Stm32作为服务器与stm32作为客户端程序编写的基本步骤,思路清理: 1.stm ...
最新文章
- 【驱动】GPIO 作为按键时的 设备树 配置
- 常用Linux Shell命令组合
- 自动化测试pythontest_自动化测试教程-Pytest的基本应用
- pythony语法小练习
- 安卓服务Service详解
- python--numpy
- c++中介者模式mediator
- csv去重 python_python去重函数是什么
- 插入网站连接_网站开发与网页制作
- JavaBean、bean 、POJO、PO、DTO、VO、BO 、EJB、EntityBean
- 谷歌ai人工智能叫什么_Google I / O 2017的“ AI First”口号
- 数据结构——p = new Lnode和Lnode *p有什么区别
- 【Beta】 第六次Daily Scrum Meeting
- dcos 正确的查看日志的姿势
- 让数据快速使用, “无代码”新贵Nextion BI高效解决企业“BI”难
- Python攻关之模块(2)
- [Cortex-M3]-3-分散加载文件解析(.sct)
- 关于编程学习的心态与方法
- 4 计算机系统的异步性,操作系统复习资料.doc
- 《AutoCAD全套园林图纸绘制自学手册》一1.3 园林布局