我需要做一个客户端连续给服务器发送数据的程序,每次发送一次就要断开,下次连接要重新选择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
{ |