C# Tcp服务器实现多端口、多协议解析


一、说明

1.1 为什么需要?

有时候物联网设备管理平台需要接收不同厂家的物联网设备,每家的设备通讯协议各不相同。平台需要为每个厂商提供一个通讯端口。所以需要实现一个端口,对应一个数据解析器。

1.2 为什么不创建多个Server?
  • 难管理。
  • 多个Server之间数据互通就变得很麻烦
1.3 为什么不用同一个端口?

当同一个端口解析不同协议时,就需要协议侦测,举个例子说,你想用一个吸管去知道四个杯子里都是什么的时候,你只有一个一个去尝,所以这样的设计性能低下,且并不可靠,甚至会导致严重的偶发性bug。所以最好最好不要这样设计。


二、程序集源码

2.1 源码位置
2.2 说明文档

文档首页

三、安装

Nuget安装TouchSocket即可,具体步骤详看链接博客。

VS、Unity安装和使用Nuget包

四、声明插件类

/// <summary>
/// 此插件实现,按照不同端口,使用不同适配器。
/// <list type="bullet">
/// <item>7789端口:使用"**"结尾的数据</item>
/// <item>7790端口:使用"##"结尾的数据</item>
/// </list>
/// </summary>
class DifferentProtocolPlugin : TcpPluginBase<ISocketClient>
{
    protected override void OnConnecting(ISocketClient client, ClientOperationEventArgs e)
    {
        if (client.ServicePort == 7789)
        {
            client.SetDataHandlingAdapter(new TerminatorPackageAdapter("**"));
        }
        else
        {
            client.SetDataHandlingAdapter(new TerminatorPackageAdapter("##"));
        }
        base.OnConnecting(client, e);
    }

    protected override void OnReceivedData(ISocketClient client, ReceivedDataEventArgs e)
    {
        //如果是自定义适配器,此处解析时,可以判断e.RequestInfo的类型

        client.Logger.Info($"{client.GetInfo()}收到数据,服务器端口:{client.ServicePort},数据:{e.ByteBlock}");
        base.OnReceivedData(client, e);
    }
}


五、创建服务器

static void Main(string[] args)
{
    TcpService service = new TcpService();
    service.Setup(new TouchSocketConfig()//载入配置
        .UsePlugin()
        .SetListenIPHosts(new IPHost[] { new IPHost("tcp://127.0.0.1:7789"), new IPHost(7790) })//同时监听两个地址
        .ConfigureContainer(a =>//容器的配置顺序应该在最前面
        {
            a.AddConsoleLogger();//添加一个控制台日志注入(注意:在maui中控制台日志不可用)
        })
        .ConfigurePlugins(a =>
        {
            a.Add<DifferentProtocolPlugin>();
        }))
        .Start();//启动

    service.Logger.Info("服务器成功启动");
    Console.ReadKey();
}

本文示例demo

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若汝棋茗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值