C# SuperSocket 手把手教你入门 傻瓜教程---3(Telnet服务器和客户端请求处理)

 C# SuperSocket 手把手教你入门 傻瓜教程系列教程

C# SuperSocket 手把手教你入门 傻瓜教程---1(服务器单向接收客户端发送数据)

C# SuperSocket 手把手教你入门 傻瓜教程---2(服务器和客户端双向通信)

C# SuperSocket 手把手教你入门 傻瓜教程---3(Telnet服务器和客户端请求处理)

C# SuperSocket 手把手教你入门 傻瓜教程---4(创建一个服务器和多客户端双向通信程序)

C# SuperSocket 手把手教你入门 傻瓜教程---5(探索自定义AppServer、AppSession,Conmmand,用配置文件App.comfig启动服务器)

C# SuperSocket 手把手教你入门 傻瓜教程---6(CommandLineProtocol---命令行协议)

C# SuperSocket 手把手教你入门 傻瓜教程---7(自定义CommandLineProtocol---命令行协议) 

C# SuperSocket 手把手教你入门 傻瓜教程-8(TerminatorReceiveFilter - 结束符协议) 

 

  

目录

一、创建工程项目

二、下载SuperSocket动态库

三、使用官方提供的启动服务器的代码进行测试服务器的启动和停止

四、注册客户端链接

五、注册会话接收事件处理客户端发送的信息

六、用SocketTool工具软件和Telnet服务器测试


        本文的控制台项目是根据SuperSocket官方Telnet示例代码进行调试的,官方示例代码:Telnet示例

       开始我的第一个Telnet控制台项目之旅:


一、创建工程项目

        创建控制台项目:打开visual Studio 2017程序,文件--->新建--->项目

        创建一个项目名称为:SuperSocketDemo 的工程项目。

 二、下载SuperSocket动态库

        最好通过Visual Stuido 2017程序的NuGet来获取,本人也比较喜欢这种方式,可以更新组件版本。

 1、点击浏览,输入SuperSocket,选中SuperSocket组件安装SuperSocket组件。

 2、选中SuperSocket.Engine组件,安装SuperSocket.Engine组件。

 

 3、添加完成组件后需要注意将config文件进行编译成内容,log4net需要使用config文件

将Config文件夹中的log4net.config的【复制到输出目录】组态为“如果较新则复制”

 4、查看引入后的项目整体目录,框红线的为引入supersocket组件和log4net文件

三、使用官方提供的启动服务器的代码进行测试服务器的启动和停止

1、Program.cs中添加如下三行代码

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

2、Program.cs中添加如下telnet服务启动和关闭程序代码

       static void Main(string[] args)
        {
            var appServer = new AppServer();
           //启动应用服务端口
          if (!appServer.Setup(2017)) //启动时监听端口2017
          {
               Console.WriteLine("服务端口启动失败!");
               Console.ReadKey();
               return;
          }

          Console.WriteLine();

         //尝试启动应用服务
          if (!appServer.Start())
          {
               Console.WriteLine("服务启动失败!");
               Console.ReadKey();
               return;
           }

           Console.WriteLine("服务启动成功,请按'q'停止服务!");

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

          //停止服务
          appServer.Stop();

          Console.WriteLine("服务已停止!");
          Console.ReadKey();

        }

3、Program.cs完整的程序代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

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

namespace SuperSocketDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var appServer = new AppServer();
           //启动应用服务端口
          if (!appServer.Setup(2017)) //启动时监听端口2017
          {
               Console.WriteLine("服务端口启动失败!");
               Console.ReadKey();
               return;
          }

          Console.WriteLine();

         //尝试启动应用服务
          if (!appServer.Start())
          {
               Console.WriteLine("服务启动失败!");
               Console.ReadKey();
               return;
           }

           Console.WriteLine("服务启动成功,请按'q'停止服务!");

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

          //停止服务
          appServer.Stop();

          Console.WriteLine("服务已停止!");
          Console.ReadKey();

        }
    }
}

4、验证项目

         运行成功后可以查看Debug文件夹下的logs日志跟踪文件,从日志里面,我们可以看到服务器已经能启动成功,但是这还没有什么用,因为我们并没有处理客户的链接进来,处理客户的发送过来的信息。根据官方文档,我们继续拷贝代码来完善我们的程序。

四、注册客户端链接

1、注册客户端连接方法

Program.cs中添加如下【注册客户端连接方法】代码

appServer.NewSessionConnected += appServer_NewSessionConnected;

2、在连接方法中发送欢迎信息给客户端

Program.cs中添加如下【在连接方法中发送欢迎信息给客户端】代码。

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

3、 Program.cs完整的程序代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

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

namespace SuperSocketDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var appServer = new AppServer();
           //启动应用服务端口
          if (!appServer.Setup(2017)) //启动时监听端口2017
          {
               Console.WriteLine("服务端口启动失败!");
               Console.ReadKey();
               return;
          }

          Console.WriteLine();

         //尝试启动应用服务
          if (!appServer.Start())
          {
               Console.WriteLine("服务启动失败!");
               Console.ReadKey();
               return;
           }

           Console.WriteLine("服务启动成功,请按'q'停止服务!");

            appServer.NewSessionConnected += appServer_NewSessionConnected;

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

          //停止服务
          appServer.Stop();

          Console.WriteLine("服务已停止!");
          Console.ReadKey();

        }

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

    }
}

4、使用Telnet客户端进行测试(注意:使用telnet必须先安装telnet服务)

win10安装telnet服务后重启计算机。

 5、验证项目

(1)、安装完成Telnet客户端后,先运行telnet服务器

 (2)、进入运行win+r命令窗口cmd ,输入telnet localhost 2017。

       注:2017是端口号,参见前面的代码 

if (!appServer.Setup(2017))

 (3)、输入telnet localhost 2017按回车键后,出现Telnet Localhost窗口,窗口中有如下欢迎词“Welcome to SuperSocket Telnet Server!”,则说明服务器和Telnet客户端连接成功,参见下图。

五、注册会话接收事件处理客户端发送的信息

1、注册会话接收事件

Program.cs中添加如下【注册会话接收事件】代码

appServer.NewRequestReceived += appServer_NewRequestReceived;

2、处理会话接收事件中服务器接收到客户端发送的信息,我继续拷贝代码

Program.cs中添加如下【处理会话接收事件中服务器接收到客户端发送的信息】代码

 /// <summary>
         ///客户端请求处理
         /// </summary>
         /// <param name="session">会话</param>
         /// <param name="requestInfo">请求信息</param>

         static void appServer_NewRequestReceived(AppSession session, StringRequestInfo requestInfo)
         {
             switch (requestInfo.Key.ToUpper())
             {
                 case ("ECHO"):
                     session.Send(requestInfo.Body);
                     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;
             }
         }

3、Program.cs完整的程序代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

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

namespace SuperSocketDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var appServer = new AppServer();
           //启动应用服务端口
          if (!appServer.Setup(2017)) //启动时监听端口2017
          {
               Console.WriteLine("服务端口启动失败!");
               Console.ReadKey();
               return;
          }

          Console.WriteLine();

         //尝试启动应用服务
          if (!appServer.Start())
          {
               Console.WriteLine("服务启动失败!");
               Console.ReadKey();
               return;
           }

           Console.WriteLine("服务启动成功,请按'q'停止服务!");

            appServer.NewSessionConnected += appServer_NewSessionConnected;
            appServer.NewRequestReceived += appServer_NewRequestReceived;

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

          //停止服务
          appServer.Stop();

          Console.WriteLine("服务已停止!");
          Console.ReadKey();

        }

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



 /// <summary>
         ///客户端请求处理
         /// </summary>
         /// <param name="session">会话</param>
         /// <param name="requestInfo">请求信息</param>

         static void appServer_NewRequestReceived(AppSession session, StringRequestInfo requestInfo)
         {
             switch (requestInfo.Key.ToUpper())
             {
                 case ("ECHO"):
                     session.Send(requestInfo.Body);
                     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;
             }
         }


    }
}

4、验证项目

 (1)、先运行telnet服务器

 (2)、进入运行win+r命令窗口cmd ,输入telnet localhost 2017。       

 (3)、输入telnet localhost 2017按回车键后,出现Telnet Localhost窗口,窗口中有如下欢迎词“Welcome to SuperSocket Telnet Server!”,则说明服务器和Telnet客户端连接成功,参见下图。

(4)、在Telnet客户端输入ECHO

可以观察到Telnet服务器收到了Telnet客户端发送的ECHO

 (5)、在Telnet客户端输入ADD

可以观察到Telnet服务器收到了Telnet客户端发送的ADD

  (6)、在Telnet客户端输入MULT

可以观察到Telnet服务器收到了Telnet客户端发送的MULT

六、用SocketTool工具软件和Telnet服务器测试

        网上有一个tcp/udp的测试工具(SocketTool)可以链接服务器,下面是测试过程

1、运行Telnet服务器

2SocketTool设置IP地址为127.0.0.1,端口号为2017

3、Telnet服务器和SocketTool客户端连接成功

可以观察到SocketTool客户端收到了Telnet服务器发送的欢迎信息“Welcome to SuperSocket Telnet Server!”

 4、SocketTool客户端输入 ADD 12345

服务器收到客户端发送的ADD 12345后,给客户端回复12345

5、SocketTool客户端输入 ECHO 67890

服务器收到客户端发送的ECHO 67890后,给客户端回复67890

6、SocketTool客户端输入 MULT 10 20 30

 服务器收到客户端发送的MULT 10 20 30后,给客户端回复6000

源程序参见如下链接:

C#SuperSocket手把手教你入门傻瓜教程(三).zip_supersocket教程-互联网文档类资源-CSDN下载

源程序中包含SocketTool.exe TCP&UPD测试工具

开发工具为:Visual Studio 2017

致谢!      

       黄昏前黎明后黄昏前黎明后

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值