标题: 关于LWIP Raw TCP server 程序注意事项:stm32+enc28j60 [打印本页]

作者: heicad    时间: 2014-5-20 15:27
标题: 关于LWIP Raw TCP server 程序注意事项:stm32+enc28j60

这是一个牛人写的转过来
你要是想写一个完整的TCPserver的程序,你可以把程序写成电脑向你板子发送数据,然后板子将收到的数据回发给电脑。到后期再对收到的数据进行处理以达到你板子的需求。

这个收发程序的结果应该是能够完整的将收到的数据完整的发送给电脑,不论你电脑发送的速度有多快,包有多大,一切的不成功都是你自身的原因,不要试图降低发送频率或者将包变小来解决问题。那都是治标不治本的做法。

我用的板子是stm32+enc28j60,网上有一堆移植教程,不过可能你会在移植中出现各种问题,而且有可能你遇到的问题网上还没有,我建议有时间的话看看lwip的原理,这里推荐老衲五木的《LWIP协议详解》,相当经典,看完之后至少茅斯顿开了一大半。不过有可能你没有多少耐心去看完,就只能彷徨又着急的去四处求救了。

接下来说几个注意事项:

1.硬件:

2.软件

最好参考官方lwip包里的APP,我在跑官方的程序的时候没有问题,但是看别人写的程序,拿来用用的时候就出了一堆问题。初级的移植相关的内容我就不说了,主要说在写TCPserver遇到的问题。

我在看别人写的收发数据的server,出现了在传输大量数据且速度很快的情况下丢失数据乃至于多出数据的情况.TCP是一种可靠性非常高的传输协议,在告诉和大量数据的情况下,就算有丢包(肯定有stm32无法应答的情况)TCP也会重传,而且有滑动窗口和阻塞窗口控制,能够知道server还能接受多大的数据包,所以一切的失败都不是TCP协议本身的问题,一定是硬件或者软件上写的有问题。

在这里先讲一个TCP整个工作的大致流程:enc28j60得到包-->ARP层(分析数据包是否更新ARP列表以及是否传输到IP层)-->IP(对收到的包进行重组,因为包太大所以发送的时候进行了分片,现在接收自然要重组)-->TCP(得到一个完整的数据包,所以你就可以在回调函数里的pbuf变量上取你想要的数据进行处理)

写server的时候尽量还是写完整一点,也就是尽量处理好错误和一些意外的情况。现在讲一下官方lwip中app的tcpecho_raw中需要注意的一些语句,这些语句你写server的时候也要注意,不然灾难不断:


作者: 1375917982gxut    时间: 2014-11-28 10:24
好资料,51黑有你更精彩!!!
作者: 十字街口    时间: 2014-12-12 15:53
正在搞这个,学习下
作者: 李志博32    时间: 2016-7-10 17:12
学习学习

作者: xiaoc27    时间: 2016-8-31 20:52
愚钝的我,还是不明白
作者: dormclub    时间: 2019-12-13 15:59
附件在哪里呢,有资料吗




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1