SuperSocket框架中BinaryRequestInfo协议的使用

Easter79
• 阅读 927

一、开发环境

  1.Windows 10 企业版 64位

  2.Microsoft Visual Studio 2017 企业版

二、项目开始

  1.新建控制台程序,项目名称“BinarySuperSocket”,.net框架“4.7.1”

  SuperSocket框架中BinaryRequestInfo协议的使用

  2.安装SuperSocket的包,点击 “工具->NuGet包管理器->程序包管理器控制台”

  SuperSocket框架中BinaryRequestInfo协议的使用

   输入“install-package supersocket”,然后回车,提示安装成功,见下图

     SuperSocket框架中BinaryRequestInfo协议的使用

  SuperSocket框架中BinaryRequestInfo协议的使用

  输入“install-package supersocket.engine”,然后回车,提示安装成功,见下图

   SuperSocket框架中BinaryRequestInfo协议的使用

  SuperSocket框架中BinaryRequestInfo协议的使用

  3.新建BinarySession类

   SuperSocket框架中BinaryRequestInfo协议的使用 SuperSocket框架中BinaryRequestInfo协议的使用

using SuperSocket.SocketBase;
using SuperSocket.SocketBase.Protocol;

namespace BinarySuperSocket
{
    public class BinarySession : AppSession<BinarySession, BinaryRequestInfo>
    {
    }
}

BinarySession类

   4.新建BinaryServer类

   SuperSocket框架中BinaryRequestInfo协议的使用 SuperSocket框架中BinaryRequestInfo协议的使用

using SuperSocket.SocketBase;
using SuperSocket.SocketBase.Protocol;

namespace BinarySuperSocket
{
    public class BinaryServer : AppServer<BinarySession, BinaryRequestInfo>
    {

        public BinaryServer(IReceiveFilterFactory<BinaryRequestInfo> protocol) : base(protocol)
        {
        }
    }
}

BinaryServer类

  5.新建BinaryReceiveFilter类

   SuperSocket框架中BinaryRequestInfo协议的使用 SuperSocket框架中BinaryRequestInfo协议的使用

using System;
using SuperSocket.SocketBase.Protocol;

namespace BinarySuperSocket
{
    public class BinaryReceiveFilter : IReceiveFilter<BinaryRequestInfo>
    {
        public int LeftBufferSize { get; set; }

        public IReceiveFilter<BinaryRequestInfo> NextReceiveFilter { get; set; }

        public FilterState State { get; set; }

        public BinaryRequestInfo Filter(byte[] readBuffer, int offset, int length, bool toBeCopied, out int rest)
        {
            byte[] value = new byte[length];
            Array.Copy(readBuffer, offset, value, 0, length);
            BinaryRequestInfo binaryRequestInfo = new BinaryRequestInfo("key", value);
            rest = length - value.Length;
            return binaryRequestInfo;
        }

        public void Reset()
        {
        }
    }
}

BinaryReceiveFilter类

  6.新建BinaryReceiveFilterFactory类

   SuperSocket框架中BinaryRequestInfo协议的使用 SuperSocket框架中BinaryRequestInfo协议的使用

using System.Net;
using SuperSocket.SocketBase;
using SuperSocket.SocketBase.Protocol;

namespace BinarySuperSocket
{
    public class BinaryReceiveFilterFactory : IReceiveFilterFactory<BinaryRequestInfo>
    {
        public IReceiveFilter<BinaryRequestInfo> CreateFilter(IAppServer appServer, IAppSession appSession, IPEndPoint remoteEndPoint)
        {
            BinaryReceiveFilter binaryReceiveFilter = new BinaryReceiveFilter();
            return binaryReceiveFilter;
        }
    }
}

BinaryReceiveFilterFactory类

  7.Main函数调用

   SuperSocket框架中BinaryRequestInfo协议的使用 SuperSocket框架中BinaryRequestInfo协议的使用

using System;
using System.Text;

namespace BinarySuperSocket
{
    class Program
    {
        static void Main(string[] args)
        {
            BinaryReceiveFilterFactory filterFactory = new BinaryReceiveFilterFactory();
            BinaryServer server = new BinaryServer(filterFactory);

            server.NewSessionConnected += Server_NewSessionConnected;
            server.SessionClosed += Server_SessionClosed;
            server.NewRequestReceived += Server_NewRequestReceived;

            bool b = server.Setup(7788);//设置端口号
            Console.WriteLine($"设置端口号结果:{b}");

            if (b)
            {
                bool s = server.Start();//开始服务
                Console.WriteLine($"服务开启结果:{s}");
            }

            Console.ReadKey();
        }

        private static void Server_NewRequestReceived(BinarySession session, SuperSocket.SocketBase.Protocol.BinaryRequestInfo requestInfo)
        {
            StringBuilder sb = new StringBuilder();
            Array.ForEach(requestInfo.Body, b => sb.Append($"{b} "));
            Console.WriteLine($"接收到客户端 {session.Config.Ip}:{session.Config.Port} 的数据:");
            Console.WriteLine($"字节数组形式:{sb.ToString()}");
            Console.WriteLine($" ASCII码转换:{Encoding.ASCII.GetString(requestInfo.Body)}");
        }

        private static void Server_SessionClosed(BinarySession session, SuperSocket.SocketBase.CloseReason value)
        {
            Console.WriteLine($"客户端 {session.Config.Ip}:{session.Config.Port} 断开,原因:{value.ToString()}");
        }

        private static void Server_NewSessionConnected(BinarySession session)
        {
            Console.WriteLine($"客户端 {session.Config.Ip}:{session.Config.Port} 已连接");
        }
    }
}

Main函数调用

  8.运行

  SuperSocket框架中BinaryRequestInfo协议的使用

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k