LwIP实现TCP通信时发送数据的问题
最近在stm32f2开发板上实现lwip通信,主要是在研究例程,修改了部分程序,现在可以实现发送和接收。由于之前是定时发送固定字符串,因此没有发现问题,后来发送不同的数据时,发现会出现丢数据的现象,但是如果把发送数据的语句放在接收中断中,即放到LwIP_Pkt_Handle();函数中,则不会出现丢数据现象,但是发送的很慢,并且不是定时发的,发送的速率是变化的,不明白是为什么。
由于我要实现的功能是把发送数据放在自己设置的定时器中断中,定时发送数据到上位机客户端,因此现在就需要知道发送数据时写完tcp_write后的数据到底是怎么传输的,为什么会出现丢数据的现象呢?费解?
希望各位大侠帮忙解释一下。关于这个lwip已经头疼了好久了。 没有高手飘过啊.......
冷清啊 又遇到什么问题了 呵呵,又是你啊,庆幸!!!
现在数据的发送已经没有问题了,可是最终要实现的定时发送数据,并且发送速率很快,暂时预计是100ms发送8000个数据,每个数据都是经AD采样来的数据,可是我现在发送数据的速度还是不能太快,否则就丢数据了。暂时还没有找到原因,但是理论上TCPIP的发送速率应该不会很慢的,所以我觉得应该是哪里出了问题。
我分析了一下,每次调用完tcp_write后数据只是送到的缓存区,等待发送,之后的整个过程好像都没有控制到。 4# luting409
问题解决没,年前特殊情况休假太早了 我做TCP转串口时也是快了丢数据,发现是操作tcp_write太快了丢的(串口中断大约5-10ms就调用一次),具体多快会丢没有测试(100ms是没有问题的)
后来做了一下判断可以了:
if (tcp_write(serial_pcb, tcp_buf, len, 1) == ERR_OK)
没有去看为什么 定时发送,我觉得你该用UDP。TCP是要握手的,不能简单地在定时中断里发送。 看到很多朋友的邮件,看来大家很多人都遇到这个问题了,我的已经解决了,现在把我修改的程序发给大家,是在原来的开发板的程序上进行修改的,主要修改的地方有:
1.屏蔽掉原来程序中再接受函数中进行发送的语句;
2.在tcp_echoserver_accept中将当前的pcb状态保存下来,即增加tcp_echoserver_pcb_test = newpcb;其中 tcp_echoserver_pcb_test 是自己定义的变量;
3.在void Time_Update(void)
{
tcp_write(tcp_echoserver_pcb_test, content, 20, TCP_WRITE_FLAG_COPY);
LocalTime += SYSTEMTICK_PERIOD_MS;
}中增加了tcp_write函数。
这几点是主要修改的几点,其中比较重要的是第二步,保存当前的pcb,我用的是比较笨的办法,因为可能tcp协议有一些地方还是没有弄清楚,才这么做的,应该还有比较好的方法。大家可以好好研究一下。 看到很多朋友的邮件,看来大家很多人都遇到这个问题了,我的已经解决了,现在把我修改的程序发给大家,是在原来的开发板的程序上进行修改的,主要修改的地方有:
1.屏蔽掉原来程序中再接受函数中进行发送的语句;
2.在tcp_echoserver_accept中将当前的pcb状态保存下来,即增加tcp_echoserver_pcb_test = newpcb;其中 tcp_echoserver_pcb_test 是自己定义的变量;
3.在void Time_Update(void)
{
tcp_write(tcp_echoserver_pcb_test, content, 20, TCP_WRITE_FLAG_COPY);
LocalTime += SYSTEMTICK_PERIOD_MS;
}中增加了tcp_write函数。
这几点是主要修改的几点,其中比较重要的是第二步,保存当前的pcb,我用的是比较笨的办法,因为可能tcp协议有一些地方还是没有弄清楚,才这么做的,应该还有比较好的方法。大家可以好好研究一下。 你好,我最近也在学习这个,因为是自己的板子,没有例程,所以想问下能不能把你的以太网的例程给我发一份,非常感谢。 我邮箱:zwc_1116@163.com
页:
[1]