SuperSocket中使用BinaryRequestInfo

**

SuperSocket中使用BinaryRequestInfo协议

**1、新建BinarySession类

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

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

2、新建BinaryServer类

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

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

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

3、新建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, 0, length);
            BinaryRequestInfo binaryRequestInfo = new BinaryRequestInfo("key", value);
            rest = length - value.Length;
            return binaryRequestInfo;
        }

        public void Reset()
        {
        }
    }

}

4、新建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;
        }
    }
}

**5、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(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} 已连接");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值