---
id: tcpcommandlineplugin
title: 命令行执行插件
---

### 定义

命名空间：TouchSocket.Sockets <br/>
程序集：[TouchSocket.dll](https://www.nuget.org/packages/TouchSocket)

## 一、说明

**TcpCommandLinePlugin**命令行执行插件，是用于TCP的快捷事务实现。该类是抽象类，必须通过继承，在继承类中，声明的具的**公共的**且名称以**Command**结尾的方法，均可被快捷执行。

## 二、创建快捷执行插件

```csharp showLineNumbers
/// <summary>
/// 命令执行插件。方法必须以Command结尾。
/// </summary>
class MyCommandLinePlugin : TcpCommandLinePlugin
{
    private readonly ILog logger;

    public MyCommandLinePlugin(ILog logger) : base(logger)
    {
        this.ReturnException = true;//表示执行异常的时候，是否返回异常信息
        this.logger = logger;
    }

    /// <summary>
    /// 加法
    /// </summary>
    /// <param name="a"></param>
    /// <param name="b"></param>
    /// <returns></returns>
    public int AddCommand(int a, int b)
    {
        this.logger.Info($"执行{nameof(AddCommand)}");
        return a + b;
    }

    /// <summary>
    /// 乘法，并且获取调用者信息
    /// </summary>
    /// <param name=""></param>
    /// <param name="a"></param>
    /// <param name="b"></param>
    /// <returns></returns>
    public int MULCommand(ISocketClient socketClient,int a, int b)
    {
        this.logger.Info($"{socketClient.IP}:{socketClient.Port}执行{nameof(MULCommand)}");
        return a * b;
    }

    /// <summary>
    /// 测试异常
    /// </summary>
    /// <exception cref="Exception"></exception>
    public void ExcCommand()
    {
        throw new Exception("我异常了");
    }
}
```

## 三、创建服务器

```csharp showLineNumbers
TcpService service = new TcpService();

var config = new TouchSocketConfig();
config.SetListenIPHosts(new IPHost[] { new IPHost("127.0.0.1:7789"), new IPHost(7790) }) //同时监听两个地址
      .SetDataHandlingAdapter(() =>
      {
          //return new TerminatorPackageAdapter(1024, "\r\n");//命令行中使用\r\n结尾 
          return new NormalDataHandlingAdapter();//亦或者省略\r\n，但此时调用方不能高速调用，会粘包
      })
      .ConfigureContainer(a => 
      {
          a.AddConsoleLogger();
      })
      .ConfigurePlugins(a =>
      {
          a.Add<MyCommandLinePlugin>();
      });

//载入配置
service.Setup(config);

//启动
service.Start();

service.Logger.Info("服务器成功启动。");
service.Logger.Info("使用：“Add 10 20”测试");
service.Logger.Info("使用：“MUL 10 20”测试");
service.Logger.Info("使用：“Exc”测试异常");
```

## 四、调用

上述快捷执行插件，即可被普通tcp客户端，或cmd/telnet等便捷调用。

调用数据格式：

`Add 10 20 /r/n` **/r/n**非必须，但是当适配器选为[终止字符分割适配器](./packageadapter.mdx)时，则必须。不然，则不可连续调用，会粘包。

:::tip 提示

调用的参数也支持自定义实体类，届时参数使用Json数据格式即可。

:::  


[本文示例Demo](https://gitee.com/RRQM_Home/TouchSocket/tree/master/examples/Tcp/TcpCommandLineConsoleApp)
