打印

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

[复制链接]
284|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
社畜一枚|  楼主 | 2018-7-11 19:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我需要做一个客户端连续给服务器发送数据的程序,每次发送一次就要断开,下次连接要重新选择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函数执行过程太长,时间又不好把握,加之链表数据的问题导致的问题,困扰我好久了。
下面附上我的程序,请大佬们多多指教,谢谢啦。




#include "tcp_client_demo.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "lcd.h"
#include "malloc.h"
#include "stdio.h"
#include "string.h"
#include "timer.h"
#define MAX 20
extern int i,n;
float   t;
u8 tcp_client_recvbuf[TCP_CLIENT_RX_BUFSIZE];

float  tcp_client_sendbuf[MAX];


u8 tcp_client_flag;
u8 flag1=1;
u8 flag2=1;

void tcp_client_set_remoteip(void)//选择IP
{

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

397

主题

401

帖子

0

粉丝