tcp通信出现的粘包问题

1.情景
在使用C# tcp编程的时候,服务端通过一个循环发送多次数据到客户端。
客户端期望收到多次数据,然后依次处理数据。
结果多次发送的数据,通过tcp传输后,在客户端并没有多次收到,而是一次(不确定次数)收到了连在一起的服务端数据。
客户端原有处理逻辑,并出现了bug。

2.原因
这是tcp协议的问题,也是网络层的实现方式。 很明显,我们是无法控制的。唯一能做的就是,客户端接受代码要考虑到粘包问题的存在,所以要有相应的解粘包逻辑。

3.解决
通过网络传输数据的时候,要注意自己数据格式的编写。严格来说数据要有长度标志,结束标志等。在客户端接收的时候,要考虑通过这些标志的解析来保证收到数据的准确性。

4.总结
开始遇到这个问题,完全不知道是因为tcp粘包的问题,对于写过网络编程的人,处理粘包是最基本的素质。 但是对于没有这个概念的人,却是一头雾水,完全不知道自己的问题出在哪里。这就是没有真正理解计算机系统导致的,
如果对计算机系统有了深入理解之后,可能在遇到各种非业务逻辑性的程序bug时候,就会更容易发现是什么原因导致的bug。

posted @ 2016-11-10 12:25  braveliu.site  阅读(188)  评论(0编辑  收藏  举报