SuperSocket教程二:服务端处理接收数据

在上一个教程我们建立了客户端和服务端的连接
接下来我们进行添砖加瓦
让程序变得越来越厉害
先认识一下Super Socket里的session
在这里插入图片描述
当客户端连接后会生成一个session对象
广发给Appsession类的解释是
AppServer basic class for whose request infoe type is StringRequestInfo(其请求信息类型为StringRequestInfo的AppServer基类)
这个是基类 说明可以继承,但是那个后面再讲

教程一中
在这里插入图片描述

这行代码只是拿到了与客户端的对话信息
并没有拿到客户端发送过来的信息
所以会说返回 这其实是一个异常信息
在这里插入图片描述

聪明的小伙伴这个时候就可以想到
我们需要去建立一个委托去处理这个信息才行
那么首先得拿到这个信息哦 怎么拿到?
在这里插入图片描述
void RequestHandler<TAppSession, TRequestInfo>(TAppSession session, TRequestInfo requestInfo)
那就是RequestHandler
这个委托就是SuperSocket用来做这件事情的
那么我们在上一次的基础上加点代码
在这里插入图片描述
requestInfo就是客户端发送过来的信息的包装类
想深入的也可以看看这个类里面有什么
在这里插入图片描述

当然 思路别乱 请手动忽略
现在可以不用看 我们只需要知道它有客户端发来的请求就可以了

那么加上了委托我们的客户端发送的信息就可以被处理了吗
当然这才成功了一小步

让我们启动服务端
在这里插入图片描述
使用客户端进行连接
在这里插入图片描述
发送ECHO hello My name is Client\r\n
在这里插入图片描述
服务端会回复hi my name is Server
在这里插入图片描述
主要是这里进行的返回操作
显然我发送其他信息
在这里插入图片描述
他就会给我回复 你奶奶的
它不让我们发 哈哈哈
当我们去掉ECHO字段
在这里插入图片描述

什么也不会回复了
为什么会这样
前面的字段就像一个协议
只有以ECHO 为开头的我才会去进行返回
不然不给 协议普遍存在于这个世界上
不然谁给我服务器发 我都去返回 那岂不是开销很大

当然 我们不仅仅只能发送ECHO
我们还能
在这里插入图片描述
做加法和乘法呢
在这里插入图片描述
在这里插入图片描述
我们以不同的协议告诉服务器我们该做什么
服务器就做什么返回给我们
这样就形成了一个完整的闭环

那肯定协议不止只有这三个呀
那么对于很多协议 SuperSocket该怎么去处理呢

那就要看下一个教程拉
先放上本教程的代码

using SuperSocket.SocketBase;
using SuperSocket.SocketBase.Protocol;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Socket
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Press any key to start the server!");

            Console.ReadKey();
            Console.WriteLine();

            var appServer = new AppServer();
            
            appServer.NewSessionConnected += new SessionHandler<AppSession>(appServer_NewSessionConnected);
            appServer.NewRequestReceived += new RequestHandler<AppSession, StringRequestInfo>(appServer_NewRequestReceived);

            //Setup the appServer
            if (!appServer.Setup(2012)) //Setup with listening port
            {
                Console.WriteLine("Failed to setup!");
                Console.ReadKey();
                return;
            }

            Console.WriteLine();

            //Try to start the appServer
            if (!appServer.Start())
            {
                Console.WriteLine("Failed to start!");
                Console.ReadKey();
                return;
            }

            Console.WriteLine("The server started successfully, press key 'q' to stop it!");

            while (Console.ReadKey().KeyChar != 'q')
            {
                Console.WriteLine();
                continue;
            }

            //Stop the appServer
            appServer.Stop();

            Console.WriteLine("The server was stopped!");
            Console.ReadKey();
           
        }
        /// <summary>
        /// 对接收的数据进行处理
        /// </summary>
        /// <param name="session"></param>
        /// <param name="requestInfo"></param>
        private static void appServer_NewRequestReceived(AppSession session, StringRequestInfo requestInfo)
        {
            try
            {
                switch (requestInfo.Key.ToUpper())
                {
                    case ("ECHO"):
                        if(requestInfo.Body.Contains("hello"))
                        session.Send("hi my name is Server");
                        else
                            session.Send("ninainaider");
                        break;

                    case ("ADD"):
                        session.Send(requestInfo.Parameters.Select(p => Convert.ToInt32(p)).Sum().ToString());
                        break;

                    case ("MULT"):

                        var result = 1;

                        foreach (var factor in requestInfo.Parameters.Select(p => Convert.ToInt32(p)))
                        {
                            result *= factor;
                        }

                        session.Send(result.ToString());
                        break;
                }
            }
            catch (Exception)
            {

                Console.WriteLine("异常");
            }
            
        }

        static void appServer_NewSessionConnected(AppSession session)
        {
            session.Send("Welcome to SuperSocket Telnet Server");
        }
    }
}

(7条消息) SuperSocket教程二:服务端处理接收数据_亮大大大的博客-CSDN博客 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值