全部的书上都说, tcp是流式传输, 这是什么意思? 假设A给B经过TCP发了200字节, 而后又发了300字节, 此时B调用recv(设置预期接受1000个字节), 那么请问B实际接受到多少字节? 根据咱们以前讲得tcp粘包特性,可知, B端调用一次recv, 接受到的是500字节。服务器
所谓流式传输, 说白了, 就是管道中的水, 第一次给你发了200斤的水, 第二次给你发了300斤的水, 而后你在对端取的时候, 这200斤和300斤的水, 已经粘在一块儿了, 没法直接分割, 没有界限了。tcp
全部的书上都说, udp是数据报传输, 我看了晕晕乎, 什么意思? 假设A给B经过udp发了200字节, 而后又发了300字节, 此时B调用recvfrom(设置预期接受1000个字节), 那么请问B实际接受到多少字节? 写了个程序测了一下, 发现B调用recvfrom接收到的是200本身, 另外的300字节必须再次调用recvfrom来接收。测试
所谓的数据报传输, 说白了, 就有消息和消息之间有自然的分割, 对端接收的时候, 不会出现粘包。 发10次, 就须要10次来接收。博客
我写tcp程序测了一下, 果真如此。 又写udp程序测试一下, 果真如此。 个人博客中, 有不少tcp/udp程序, 有兴趣的朋友, 能够玩玩这些程序, 实际验证一下, 加深理解。udp
在实际工做中, 我发现udp没有你想像的那么不靠谱, 也没有书上乱讲的那样不靠谱, 并且, 不少实际存在的大系统, IM服务器, 部分场景用的就是udp.程序