一个Telnet示例

关键字: Telnet, 控制台示例, 创建项目,启动服务,停止服务,处理连接,处理请求

准备工作

确保你已经安装了最新的 .NET Core SDK (3.0 或更高版本)。

创建一个控制台项目然后引用SuperSocket (目标框架为netcoreapp3.0)

  1. dotnet new console
  2. dotnet add package SuperSocket.Server --version 2.0.0-*

添加SuperSocket和其它你可能需要使用的namespace的using

  1. using System.Threading.Tasks;
  2. using Microsoft.Extensions.Hosting;
  3. using Microsoft.Extensions.Logging;
  4. using SuperSocket;
  5. using SuperSocket.ProtoBase;

在Main方法中书写SuperSocket宿主启动的方法

  1. static async Task Main(string[] args)
  2. {
  3. var host = ...;
  4. ...
  5. await host.RunAsync();
  6. }

创建宿主

  1. var host = SuperSocketHostBuilder
  2. .Create<StringPackageInfo, CommandLinePipelineFilter>()

用Package的类型和PipeLineFilter的类型创建SuperSocket宿主。

注册用于处理接收到的数据的包处理器

  1. .UsePackageHandler(async (session, package) =>
  2. {
  3. var result = 0;
  4. switch (package.Key.ToUpper())
  5. {
  6. case ("ADD"):
  7. result = package.Parameters
  8. .Select(p => int.Parse(p))
  9. .Sum();
  10. break;
  11. case ("SUB"):
  12. result = package.Parameters
  13. .Select(p => int.Parse(p))
  14. .Aggregate((x, y) => x - y);
  15. break;
  16. case ("MULT"):
  17. result = package.Parameters
  18. .Select(p => int.Parse(p))
  19. .Aggregate((x, y) => x * y);
  20. break;
  21. }
  22. await session.SendAsync(Encoding.UTF8.GetBytes(result.ToString() + "\r\n"));
  23. })

将收到的文字发送给客户端。

配置日志

  1. .ConfigureLogging((hostCtx, loggingBuilder) =>
  2. {
  3. loggingBuilder.AddConsole();
  4. })

仅仅启用Console日志输出, 你也可以在此处注册你自己需要的第三方日志类库。

配置服务器如服务器名和监听端口等基本信息

  1. .ConfigureSuperSocket(options =>
  2. {
  3. options.Name = "Echo Server";
  4. options.Listeners = new [] {
  5. new ListenOptions
  6. {
  7. Ip = "Any",
  8. Port = 4040
  9. }
  10. };
  11. }).Build();

启动宿主

  1. await host.RunAsync();