美文网首页
0003-异步编程粘包

0003-异步编程粘包

作者: HeavenOrSky | 来源:发表于2019-04-18 22:26 被阅读0次

针对于上一篇文章中,加入客户端一次性发送大量的数据,那么有些信息就会粘包就会发生。
客户端代码发送消息代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ASYNClient
{
    class Program
    {
        static void Main(string[] args)
        {
            Client client = new Client();
            //等待客户端连接服务器后我们按下回车键模拟客户端一次性发送多条数据
            Console.ReadLine();
            int index = 100;
            for (int i = 0; i < 15; i++)
            {
                index++;
                string message = index.ToString(); 
                byte[] data = Encoding.UTF8.GetBytes(message);
                client.SendData(data);
            }
            Console.ReadLine();
        }
    }
}
服务器第一次运行结果
服务器第二次运行结果

从以上的结果来看我们一共发送了15条数据,第一次测试服务器接收到了4次数据,第2次接受的数据一共粘了11条数据,第4次粘了2条数据;第二次测试服务器接受到了6次数据,第2次接受的数据粘了4条数据,第4次接收的数据粘了5条数据,第5次接收的数据粘了3条数据。虽然发生了粘包但是所有数据都是按照顺序到达的服务器,这是说明了TCP协议的可靠性,没有任何的数据丢失。并且每次接收的数据都是按客户端的一条信息为单位的。没有出现客户端的一条数据分两次到达服务器的。


第三次测试
第四次测试

我们两次测试,还是同样的规律。我将服务器的缓冲区改小将8096设置为512

 byte[] buffer = new byte[512];

并且将发送的消息设置为了朱自清的《匆匆》内容。我们看到了一条消息分成了4次发送


小缓存区,单条大信息发送

但是在第1次和第2次,第2次和第3次收消息的时候出现了乱码,将","和"去"分成了两次发送没有正确解析外,其他的信息还是正确发送了,并且顺序没有发生改变。

相关文章

  • 0003-异步编程粘包

    针对于上一篇文章中,加入客户端一次性发送大量的数据,那么有些信息就会粘包就会发生。客户端代码发送消息代码如下: 从...

  • RxJS

    一、简介(异步编程) 源自微软的JS脚本,针对异步数据流的编程。它将所有的数据(http,DOM,或普通数据等)包...

  • TCP粘包拆包

    TCP粘包拆包定义 拆包和粘包是在socket编程中经常出现的情况,在socket通讯过程中,如果通讯的一端一次性...

  • netty如何处理拆包与粘包

    拆包与粘包是网络编程中必会出现的一个问题。因此,本文先介绍下什么是拆包与粘包,然后通过例子演示这个现象,最后再介绍...

  • Netty原理(五)Netty中粘包和拆包的解决方案

    1.粘包和拆包 粘包和拆包是TCP网络编程中不可避免的,无论是服务端还是客户端,当我们读取或者发送消息的时候,都需...

  • ES6学习--异步编程--Generator

    异步编程 : (异步编程的语法目的就是让异步编程更像同步编程) 回调函数利用回调函数实现异步编程本身没有问题, 问...

  • JavaScript异步编程好文摘要

    JavaScript之异步编程简述JavaScript异步编程

  • iOS socket编程”粘包“问题

    TCP/IP传输层有两个并列的协议:TCP和UDP。其中TCP(transport control protoco...

  • Golang网络编程TCP粘包

    服务端代码如下 客户端 result: result通过以上截图可以看出客户端写了19次的消息到服务端。但是服务端...

  • 认识异步编程

    认识异步编程 本章主要介绍异步编程的概念和作用,Java中异步编程的场景以及不同异步编程场景应使用什么技术实现。 ...

网友评论

      本文标题:0003-异步编程粘包

      本文链接:https://www.haomeiwen.com/subject/bcmxgqtx.html