(15) C# 抽取SuperSocket库里的缓冲区类

Posted caimouse

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(15) C# 抽取SuperSocket库里的缓冲区类相关的知识,希望对你有一定的参考价值。

经常写网络程序的开发人员,就会发现C#里写缓冲区是比较麻烦的,因为它的数组不能动态地增加,每次都需要创建一个新的缓冲区。因此C#比python、C、C++等语言在这方便是有缺陷的,或者说是不足够友好的。所以在这里处理缓冲区的方式,就变得有点复杂了。如果在C++里直接new就可以了,在python里可以直接用+就解决了。

为了解决上述的问题,因此深入地钻研了一下supersocket类库,然后看到它是怎么样高效地处理接收缓冲区的,这样处理的方式是有点复杂,但是还是比自己写的要好很多。所以在一些工程里,不需要导入整个类库的功能,就需要把其中几个类抽取出来直接使用。

本文就来描述这个过程,先要把文件IBufferState.cs拷贝出来,这个文件描述了接口类IBufferState。

接着拷贝BufferList.cs文件,这个文件描述了BufferList类,这个类用来添加ArraySegment<byte>类型的,每个ArraySegment<byte>类型就是一段数据,相当于一个小缓冲区。接收的数据是一份一份的,这样就需要一个链表把它们串起来。

最后拷贝文件BufferStream.cs,它是实现了把上面的链表转换为连在一起的缓冲区,并且实现对缓冲区的操作,比如读取一个字节,读取两个字节,读取一个整数等等。这样就很方便我们对缓冲区的操作了。

整个例子的代码如下:

        static public void Test()
        {
            BufferList bufList = new BufferList();
            BufferStateE

以上是关于(15) C# 抽取SuperSocket库里的缓冲区类的主要内容,如果未能解决你的问题,请参考以下文章

C#里发现SuperSocket库不能发现命令的原因

(10)C#使用SuperSocket库发现一个用法比较怪异

SuperSocket与Netty之实现protobuf协议,包括服务端和客户端

基于SuperSocket实现的WebSocket服务器 和Unity中使用Websocket

基于SuperSocket实现的WebSocket服务器 和Unity中使用Websocket

shell 脚本 抽取指定数量的随机学生