C# Tcp服务器实现多端口、多协议解析
文章目录
- 一、说明
- 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服务器实现多端口、多协议解析相关推荐
- 计算机网络 之 TCP和UDP的端口号解析
前言:今天了解一下tcp和udp报文的端口.发现一直以来都只是知道端口用于区分同一IP的服务器的不同服务,已经端口的大小.在查找traceroute的资料的时候,才了解到一些之前没注意到的东西. (一 ...
- 【STM32H7】第8章 ThreadX NetXDUO之TCP服务器
最新教程下载:ThreadX NetXDUO网络协议栈教程更新记录贴,前11章已经发布(2022-01-03) - uCOS & uCGUI & emWin & embOS & ...
- 【STM32F407】第8章 ThreadX NetXDUO之TCP服务器
最新教程下载:ThreadX NetXDUO网络协议栈教程更新记录贴,前11章已经发布(2022-01-03) - uCOS & uCGUI & emWin & embOS & ...
- 【STM32F429】第8章 ThreadX NetXDUO之TCP服务器
最新教程下载:ThreadX NetXDUO网络协议栈教程更新记录贴,前11章已经发布(2022-01-03) - uCOS & uCGUI & emWin & embOS & ...
- 【STM32F407】第11章 RL-TCPnet V7.X之TCP服务器
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=95243 第11章 RL-TCPnet之TCP服务器 本章节为大 ...
- Java 使用Socket 实现基于DTU的TCP服务器 + 数据解析 + 心跳检测
在物联网时代,DTU的运用非常广泛 :环境监测中通过DTU将传感器的数据远程传输至云服务器也是比较常见的用法.下面我来分享一下我的项目经验 1.物理连接拓扑 2.服务器后台流程 3.代码 设备TCP服 ...
- 《ASCE1885的源码分析》の基于完成端口模型的TCP服务器框架
使用IOCP的TCP服务器使用过程大体如下: 1) 使用CreateIoCompletionPort函数创建完成端口,并以该I/O完成端口为参数创建多个服务线程: 2) 创建监听套接字: 3) 接收 ...
- tcp 服务器响应端口,TCP/HTTP连接/Socket/端口
一.TCP连接与端口 web服务器只开启了一个端口,他是如何为多用户服务的? 问题描述 不同主机之间通讯,必须依赖套接字,而端口号是套接字的标识(开始是这样认为的),那么假设web服务器进程,开启了8 ...
- dtu tcp java_SpringBoot 2 整合 Netty 实现基于 DTU 的 TCP 服务器 之 客户端
使用netty不是一天两天了,但是使用netty和DTU通讯还是第一次,接下来要做DTU的通讯协议,对接工作还没有正式开始,只收到一个简单的DTU协议文档,里面的内容大概是下面表格中的样子. 位数 内 ...
最新文章
- LeetCode实战:三数之和
- 《2019人工智能发展报告》!含计算机视觉、机器人等13个子领域(附链接)
- c语言Winmain 错误,C语言编译错误 undefined reference to `WinMain@16'
- OpenCV之mixChannels()函数使用说明
- Spring Boot 项目瘦身指南,非常实用!
- 设置MYSQL允许用IP访问
- 如何构建ASP.NET MVC4JQueryAJaxJSon示例
- Spring cloud (1)---Eureka 宣布闭源,Spring Cloud 何去何从?
- 苹果为提振销量疯狂试探!官网推出新福利:买买买更轻松
- 联想终成全球PC第一
- 千万级用户-亿级请求的平台架构演变
- msdev.exe 应用程序错误的解决方法
- Ubuntu 安装 wine 和 TIM
- 【密码学】抽象代数——群(学习笔记)
- 怎样和求职者聊天_我如何学会欣赏求职者
- 怎么用js代码画一棵树,附带下载链接
- c++ 11 原子操作库 (std::atomic)(三)
- gain在matlab里什么意思,gain gray是什么意思
- 动态监控网卡流量异常
- 用python实现相声、评书自动下载(四)