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

17 篇文章 13 订阅

在上一个教程我们建立了客户端和服务端的连接
接下来我们进行添砖加瓦
让程序变得越来越厉害
先认识一下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");
        }
    }
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Supersocket 是一个强大的网络编程框架,它提供了一套高性能的网络通信解决方案。与其他传统的套接字编程方式相比,Supersocket 提供了更方便、更灵活的数据处理方式。 Supersocket 的核心思想是让开发者自己处理数据。它提供了一套完善的事件驱动模型,开发者可以根据自己的需求定义需要处理的事件,然后根据事件类型来编写相应的处理代码。这种方式使得开发者可以自由地根据实际场景设计数据的处理逻辑,从而更好地满足业务需求。 通过 Supersocket,开发者可以准确控制数据的流向和处理过程。服务器端接收到客户端请求后,会触发相应的事件,开发者可以编写处理代码来解析和处理请求数据。类似地,客户端也可以通过事件来处理服务器返回的数据。这种方式使得数据处理更加灵活,能够更好地满足不同业务场景的需求。 Supersocket 还提供了一些方便的工具和方法,帮助开发者更高效地处理数据。例如,它提供了基于字节流的数据解析器,可以方便地解析和拼接各种协议的数据。此外,它还支持多线程和异步操作,开发者可以根据需要进行多线程并发处理,提高数据处理的效率。 总的来说,Supersocket 的自我处理数据的方式使得开发者可以更加灵活地处理网络通信中的数据。通过事件驱动模型和强大的工具支持,开发者能够根据需求自定义数据处理逻辑,提高数据的处理效率和灵活性,从而更好地满足不同业务场景的需求。 ### 回答2: Supersocket 是一个功能强大的网络通信框架,它可以帮助开发者在网络应用中使用自定义的协议进行数据通信。Supersocket 的一大特点是它能够让开发者自己处理收到的数据。 在 Supersocket 中,开发者可以通过继承自定义会话类(CustomSession)并重写相应的方法来处理收到的数据。当 Supersocket 接收到客户端发来的数据时,会自动触发会话类中的 OnReceive 方法,在这个方法中开发者可以获取到收到的数据,并进行自己的逻辑处理。 开发者可以根据自己的需求,对收到的数据进行解析、验证、处理等操作。例如,可以根据自定义的协议格式解析数据,验证数据的合法性,然后根据不同的命令或指令执行相应的操作,最后将处理结果返回给客户端。 Supersocket 提供了丰富的工具和方法,帮助开发者处理数据,例如提供了进制数据和文本数据的处理方法,可以很方便地进行编码和解码操作。 通过 Supersocket 自己处理数据,开发者可以灵活地控制数据的处理流程,可以根据自己的需求进行定制化的开发。同时,Supersocket 还提供了高性能的网络通信能力,可以处理大量并发的连接,保证数据的传输效率和稳定性。 总之,Supersocket 提供了一个便捷、灵活、高性能的网络通信框架,开发者可以通过自己处理数据,在网络应用中实现各种自定义的数据通信功能。 ### 回答3: SuperSocket是一种开源的网络通信框架,它允许用户自己处理数据。通常在网络通信中,接收到的数据是通过回调函数或事件触发机制进行处理的。然而,SuperSocket提供了更高级的功能,使用户能够直接处理数据。 使用SuperSocket,用户可以通过定义自定义协议或解析器来解析和处理接收到的数据。这意味着用户可以完全控制数据的处理逻辑。用户可以根据自己的需求自定义数据的格式,并创建相应的解析器来解析数据。 用户可以根据自己的业务逻辑在接收到数据后进行各种处理操作,如验证数据的完整性、解密数据、转换数据格式等。用户还可以根据业务需求进行数据处理和分发,比如将数据存储到数据库中、发送通知消息给其他系统等。 通过SuperSocket自己处理数据,用户可以灵活地进行数据处理,以满足不同的需求。用户可以根据自己的业务逻辑进行定制化的数据处理操作,而不受框架的限制。这大大提高了灵活性和扩展性。 总而言之,SuperSocket允许用户自己处理数据,通过定义自定义协议或解析器来解析和处理数据。这使得用户能够灵活地处理数据,并根据自己的需求进行定制化的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值