文章目录

  • 一、说明
    • 1.1 为什么需要?
    • 1.2 为什么不创建多个Server?
    • 1.3 为什么不用同一个端口?
  • 二、程序集源码
    • 2.1 源码位置
    • 2.2 说明文档
  • 三、安装
  • 四、声明插件类
  • 五、创建服务器

一、说明

1.1 为什么需要?

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

1.2 为什么不创建多个Server?

  • 难管理。
  • 多个Server之间数据互通就变得很麻烦

1.3 为什么不用同一个端口?

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


二、程序集源码

2.1 源码位置

  • Gitee
  • Github

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

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

  1. 计算机网络 之 TCP和UDP的端口号解析

    前言:今天了解一下tcp和udp报文的端口.发现一直以来都只是知道端口用于区分同一IP的服务器的不同服务,已经端口的大小.在查找traceroute的资料的时候,才了解到一些之前没注意到的东西. (一 ...

  2. 【STM32H7】第8章 ThreadX NetXDUO之TCP服务器

    最新教程下载:ThreadX NetXDUO网络协议栈教程更新记录贴,前11章已经发布(2022-01-03) - uCOS & uCGUI & emWin & embOS & ...

  3. 【STM32F407】第8章 ThreadX NetXDUO之TCP服务器

    最新教程下载:ThreadX NetXDUO网络协议栈教程更新记录贴,前11章已经发布(2022-01-03) - uCOS & uCGUI & emWin & embOS & ...

  4. 【STM32F429】第8章 ThreadX NetXDUO之TCP服务器

    最新教程下载:ThreadX NetXDUO网络协议栈教程更新记录贴,前11章已经发布(2022-01-03) - uCOS & uCGUI & emWin & embOS & ...

  5. 【STM32F407】第11章 RL-TCPnet V7.X之TCP服务器

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=95243 第11章       RL-TCPnet之TCP服务器 本章节为大 ...

  6. Java 使用Socket 实现基于DTU的TCP服务器 + 数据解析 + 心跳检测

    在物联网时代,DTU的运用非常广泛 :环境监测中通过DTU将传感器的数据远程传输至云服务器也是比较常见的用法.下面我来分享一下我的项目经验 1.物理连接拓扑 2.服务器后台流程 3.代码 设备TCP服 ...

  7. 《ASCE1885的源码分析》の基于完成端口模型的TCP服务器框架

    使用IOCP的TCP服务器使用过程大体如下: 1)  使用CreateIoCompletionPort函数创建完成端口,并以该I/O完成端口为参数创建多个服务线程: 2) 创建监听套接字: 3) 接收 ...

  8. tcp 服务器响应端口,TCP/HTTP连接/Socket/端口

    一.TCP连接与端口 web服务器只开启了一个端口,他是如何为多用户服务的? 问题描述 不同主机之间通讯,必须依赖套接字,而端口号是套接字的标识(开始是这样认为的),那么假设web服务器进程,开启了8 ...

  9. dtu tcp java_SpringBoot 2 整合 Netty 实现基于 DTU 的 TCP 服务器 之 客户端

    使用netty不是一天两天了,但是使用netty和DTU通讯还是第一次,接下来要做DTU的通讯协议,对接工作还没有正式开始,只收到一个简单的DTU协议文档,里面的内容大概是下面表格中的样子. 位数 内 ...

最新文章

  1. LeetCode实战:三数之和
  2. 《2019人工智能发展报告》!含计算机视觉、机器人等13个子领域(附链接)
  3. c语言Winmain 错误,C语言编译错误 undefined reference to `WinMain@16'
  4. OpenCV之mixChannels()函数使用说明
  5. Spring Boot 项目瘦身指南,非常实用!
  6. 设置MYSQL允许用IP访问
  7. 如何构建ASP.NET MVC4JQueryAJaxJSon示例
  8. Spring cloud (1)---Eureka 宣布闭源,Spring Cloud 何去何从?
  9. 苹果为提振销量疯狂试探!官网推出新福利:买买买更轻松
  10. 联想终成全球PC第一
  11. 千万级用户-亿级请求的平台架构演变
  12. msdev.exe 应用程序错误的解决方法
  13. Ubuntu 安装 wine 和 TIM
  14. 【密码学】抽象代数——群(学习笔记)
  15. 怎样和求职者聊天_我如何学会欣赏求职者
  16. 怎么用js代码画一棵树,附带下载链接
  17. c++ 11 原子操作库 (std::atomic)(三)
  18. gain在matlab里什么意思,gain gray是什么意思
  19. 动态监控网卡流量异常
  20. 用python实现相声、评书自动下载(四)

热门文章

  1. unity标准着色器入门-材质参数(二)
  2. Css鼠标移动变小手 pointer
  3. VLSI数字信号处理系统——第六章折叠
  4. 计算机交流大会邀请函范文,交流会的邀请函范文三篇
  5. stick和stuck的区别_Stick to和Stick with的区别
  6. png在ai转为路径_如何把ai文件转换成ico图标
  7. ZZULIOJ.1114: 逆序
  8. IIS部署图片文件夹,采用HTTP协议可获取图片
  9. 中国移动、中国联通、中国电信:5G套餐大对比
  10. oracle 设置 锁模式,对oracle几种锁模式的理解