我需要做一个客户端连续给服务器发送数据的程序,每次发送一次就要断开,下次连接要重新选择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函数执行过程太长,时间又不好把握,加之链表数据的问题导致的问题,困扰我好久了。 |