OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3701|回复: 0

LWIP客户端发送链表卡死的问题

[复制链接]
回帖奖励 1 金钱 回复本帖可获得 1 金钱奖励! 每人限 1 次(中奖概率 10%)

2

主题

3

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-10-19
在线时间
5 小时
发表于 2018-11-23 18:49:44 | 显示全部楼层 |阅读模式
我需要做一个客户端连续给服务器发送数据的程序,每次发送一次就要断开,下次连接要重新选择IP,现在出现了几个比较难理解的点:
1、我先测试连接一个IP不断开连续发送,循环发送前,这个函数tcp_connect(tcppcb,&rmtipaddr,TCP_CLIENT_PORT,tcp_client_connected); 是执行连接服务器的,但是它最后回调的函数tcp_client_connected还没有运行完,下面的while循环就开始检查是否连接上,所以肯定检查到未连接,但是程序中未连接上就会执行tcp_client_close程序,所以如果不加超时检测,几乎永远也连接不上;但是超时检测有些不稳定,好像并不是超时时间越长就会保证连接上,这块不知道怎么做,感觉连上了也会不稳定。
2、每次发如果不断开连接的话,按理论上来说TCP连接后一直会循环发送,因为不会断开,但是程序大概发送几百次之后就卡死了,问了老师他说应该是发送区的链表填充速度过快,发送速度太慢,导致链表堵死了,链表我能理解单我对这个实在理解不到程序上,就卡在这好久了,他说最好是填充数据的速度=发送的速度,我想知道有没有大佬做过这块的程序,刚接触到网络这块,感觉好多都不会。
3、之前试的发送一次就断开也有问题,我在程序里写的是发送完的下一步就执行break,跳出循环,之后就会执行断开连接程序,然后重新选择IP连接、发送;但是发送函数tcp_client_usersent(tcppcb);太慢了,所以还没发出数据就break出去并断开连接了,这样循环导致一次数据都收不到,但是应该已经连接上了,所以就想知道如果是这种工作模式,这个逻辑应该怎么写。
应该就是连接tcp的connected函数和发送数据的sent函数执行过程太长,时间又不好把握,加之链表数据的问题导致的问题,困扰我好久了。
下面附上我的程序,请大佬们帮忙看看,多多指教,谢谢啦。


选择IP及连接

选择IP及连接

循环检测发送逻辑

循环检测发送逻辑

连接调用函数

连接调用函数

发送函数

发送函数

发送调用函数(链表)

发送调用函数(链表)

关闭tcp函数

关闭tcp函数
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-2 11:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表