一、开发环境

  1.Windows 10 企业版 64位

  2.Microsoft Visual Studio 2017 企业版

二、项目开始

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

  

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

  

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

 

  

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

  

  

  3.新建BinarySession类

  

  

using SuperSocket.SocketBase;
using SuperSocket.SocketBase.Protocol; namespace BinarySuperSocket
{
public class BinarySession : AppSession<BinarySession, BinaryRequestInfo>
{
}
}

BinarySession类

  4.新建BinaryServer类

  

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类

  

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, , length);
BinaryRequestInfo binaryRequestInfo = new BinaryRequestInfo("key", value);
rest = length - value.Length;
return binaryRequestInfo;
} public void Reset()
{
}
}
}

BinaryReceiveFilter类

  6.新建BinaryReceiveFilterFactory类

  

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函数调用

  

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();//设置端口号
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协议的使用的更多相关文章

  1. Web API应用架构在Winform混合框架中的应用(1)

    在<Web API应用架构设计分析(1)>和<Web API应用架构设计分析(2)>中对WebAPI的架构进行了一定的剖析,在当今移动优先的口号下,传统平台都纷纷开发了属于自己 ...

  2. IOS(SystemConfiguration)框架中关于测试连接网络状态相关方法

    1. 在SystemConfiguration.famework中提供和联网相关的function, 可用来检查网络连接状态. 2. SC(SystemConfiguration)框架中关于测试连接网 ...

  3. 浅析Thinkphp框架中运用phprpc扩展模式

    浅析Thinkphp框架中应用phprpc扩展模式 这次的项目舍弃了原来使用Axis2做web服务端的 方案,改用phprpc实现,其一是服务端的thinkphp已集成有该模式接口,其二是phprpc ...

  4. iOS开发概述UIkit动力学,讲述UIKit的Dynamic特性,UIkit动力学是UIkit框架中模拟真实世界的一些特性。

    转发:http://my.oschina.net/u/1378445/blog/335014 iOS UIKit动力学 Dynamics UIAttachmentBehavior 实现iMessage ...

  5. Loadrunner11中webservice协议脚本总结

    Loadrunner11中webservice协议脚本总结 简介     webservices协议是建立可交互操作的分布式应用程序的新平台,它通过一系列的标准和协议来保证程序之间的动态连接,其中最基 ...

  6. 关于HttpSession 和 Hibernate框架中 session异同点的简单解析

    快速理解: HttpSession中的session是一个容器用来盛基于会话机制的信息. 比喻:我把钱放进银行的保险柜里. 解析:我的钱就是我的信息,ID等 银行的保险柜就是session容器. Hi ...

  7. SSM框架中的前后端分离

    认识前后端分离 在传统的web应用开发中,大多数的程序员会将浏览器作为前后端的分界线.将浏览器中为用户进行页面展示的部分称之为前端,而将运行在服务器,为前端提供业务逻辑和数据准备的所有代码统称为后端. ...

  8. maven springMVC SSM框架中 出现的406 (Not Acceptable)

    首先,需要清楚,http state 406代表什么意思: 406是HTTP协议状态码的一种,表示无法使用请求的特性来响应请求的网页.一般指客户端浏览器不接受所请求页面的MIME类型. 出现这样的错误 ...

  9. 无线局域网中RADIUS协议原理与实现

    转载自:http://blog.csdn.net/jinhill/article/details/5901042 摘要  RADIUS协议是一个被广泛应用于网络认证.授权和计费的协议.本文在介绍了RA ...

随机推荐

  1. Struts2 内核之我见

    Struts2 内核之我见 完整分析 Struts2 内核中文文档 本文首先探讨了 Struts2 核心控制器的源码,以帮助解读 Struts2 的工作流程.接着讲解相关外围类.最后对 Struts ...

  2. HDU3294 Girls' research

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  3. matlab画折线

    figure(721);hold on;x=1:1:5;%x轴上的数据,第一个值代表数据开始,第二个值代表间隔,第三个值代表终止 a=[203.024,113.857,256.259,244.888, ...

  4. js操作url的常用函数

    1. //替换指定传入参数的值,paramName为参数,replaceWith为新值 function replaceParamVal(oUrl,paramName, replaceWith) { ...

  5. Unity3D之Mesh(七)绘制长方体

    前言: 从现在开始,终于感觉进入一点点正题了!动态创建三维立体模型mesh!依然从简单入手:长方体. 一.基本思路 由于是创建长方体mesh,由之前的研究得知,两个数据必须要有,即:顶点的数据:ver ...

  6. leetcode 226. Invert Binary Tree(递归)

    Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 Trivia:This problem was ...

  7. python实现Deque

    1 Deque定义 deque(也称为双端队列)是与队列类似的项的有序集合.它有两个端部,首部和尾部,并且项在集合中保持不变.deque 不同的地方是添加和删除项是非限制性的.可以在前面或后面添加新项 ...

  8. rtmp与hls流媒体服务器搭建:ubuntu下Nginx搭建初探与rtmp-module的添加

    关键词:Nignx(http服务器):rtmp,hls(流媒体服务) 前言:感谢开源,感谢战斗民族.现在在做流媒体服务的一些工作,流媒体服务器搭建的网上教程多入牛毛,但是细细查看,发现很多同志贴上来的 ...

  9. 2017-2018-1 20179203 《Linux内核原理与分析》第四周作业

    攥写人:李鹏举 学号:20179203 ( 原创作品转载请注明出处) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/US ...

  10. ngCookies都做了什么

    根据官方的api文档,ngCookies的$cookieStore服务,提供了这样几个方法: 1.get(key); 2.put(key, value); 3.remove(key); 以上方法都是对 ...