测试的时候select接受数据
aa055e
8001018f0101
8310b6e3310c46afdd7f0d416ab890e93a92
840431323030
850e3230313631323135313532323530
3d5c8beae1afe49f9019869d2a31f93e914d858b5d0ec7206e423520008bc1d798b0875aa9071c2b04412c03f98a373d
aa05069f04706f6e67
最后一个aa是下一条数据的开头,以为发生了粘包问题,
先解决接收端(c),加了setsockopt,禁用nagle算法(参考nginx)。然而还是会粘包。。
然后修改服务端(netty)加了.option(ChannelOption.TCP_NODELAY, true),然而还是会粘包。
后来考虑这不是粘包问题,而是缓冲区没有flush。考虑了服务端是write and flush,应该不存在问题。
考虑接收端(c)发现read()前有sleep,故注释掉,问题解决。。
待续:粘包到底是什么效果? 为什么tcp的缓冲区到底是怎么样的?