我有两个项目(A和B)都用到了以太网,单片机端都是TCP服务端。A项目发送的数据量比较大,B数据量要小很多。两个项目都很相似,客户端接入后就开始周期性发数据。测试A项目时发现,在发数据的过程中拔掉网线然后再插上,数据能恢复传输。但是B项目做同样的操作无法恢复,只能让客户端重新连接一下才行。查找代码发现tcp_sndbuf()函数返回的发送缓冲区剩余大小不足以发送新数据所以就直接退出函数了,除非客户端重连否则再也进不来了。
奇怪的是,B代码就是基于A代码写的,以太网相关一个字都不差,只是二者打包的数据不一样(A每帧16个字节,打包到1440字节一块发;B每帧18字节打包1440字节一块发)。我甚至把A的代码中的数据打包替换成B的打包函数,数据生成速度也和B一样,但是A依然没问题。两个程序用的同一块板子测试,我真是服了。
|