当前位置: 首页 > news >正文

C# SerialPort和ISerialServer的区别

SerialPort

  • 来源:.NET Framework / .NET Core / .NET 5+ 自带的标准类。

  • 命名空间System.IO.Ports.SerialPort

  • 作用:用于直接访问和控制物理串口(COM端口),进行串口通信。

  • 使用场景:当你需要与串口设备(如传感器、单片机、GPS模块等)通信时,使用 SerialPort 是最常见的方式。

  • using System;
    using System.IO.Ports;class Program
    {static void Main(){SerialPort mySerialPort = new SerialPort("COM1");mySerialPort.BaudRate = 9600;mySerialPort.DataBits = 8;mySerialPort.Parity = Parity.None;mySerialPort.StopBits = StopBits.One;mySerialPort.Handshake = Handshake.None;mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);try{mySerialPort.Open();string msg = "Hello, World!";byte[] msgBuffer = Encoding.ASCII.GetBytes(msg);mySerialPort.Write(msgBuffer, 0, msgBuffer.Length);Console.WriteLine("Message sent.");}catch (Exception e){Console.WriteLine("Error: " e.Message);}finally{if (mySerialPort.IsOpen){mySerialPort.Close();}}}private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e){SerialPort sp = (SerialPort)sender;string indata = sp.ReadExisting();Console.WriteLine("Data Received:");Console.WriteLine(indata);}
    }

  •  ISerialServer

  • 来源不是 .NET 自带的接口,通常是某个第三方库或项目自定义的接口。

  • 作用:通常是一个抽象层,用于封装串口通信逻辑,可能是为了支持模拟串口、日志记录、测试、协议封装等功能。

  • 使用场景:在某些架构中,为了解耦或支持多种通信方式(比如真实串口、虚拟串口、网络转发等),会定义一个 ISerialServer 接口,然后由不同实现类(如 RealSerialServerMockSerialServer)来实现。

  • public interface ISerialServer
    {void Open(string portName, int baudRate);void Close();void Write(byte[] data);// 其他必要的方法和事件声明
    }public class SerialServerImpl : ISerialServer
    {private SerialPort _serialPort = new SerialPort();public void Open(string portName, int baudRate){_serialPort.PortName = portName;_serialPort.BaudRate = baudRate;_serialPort.Open();}public void Close(){if (_serialPort.IsOpen){_serialPort.Close();}}public void Write(byte[] data){if (_serialPort.IsOpen){_serialPort.Write(data, 0, data.Length);}}// 实现其他必要的方法和事件
    }

 SerialPort和ISerialServer的区别

SerialPort和ISerialServer的对比表
特性SerialPortISerialServer
是否官方否(通常是第三方或自定义)
是否具体实现是接口,需具体实现
是否用于串口通信是,通常用于串口通信,但可扩展
是否可直接使用是(可直接 new 使用)需要实现类
是否可模拟/测试不支持(除非用虚拟串口)可轻松模拟(Mock)
  • 如果你只是做简单的串口通信,直接用 SerialPort 就够了

  • 如果你在做一个大型系统,想解耦通信层、支持测试或模拟,可以定义一个 ISerialServer 接口,然后用 SerialPort 实现它。

http://www.dtcms.com/a/304701.html

相关文章:

  • 编程算法在金融、医疗、教育、制造业等领域的落地案例
  • 【nerf处理视频数据】Instant-NGP项目NeRF模型训练数据集准备指南
  • Sentinel实现限流和熔断降级
  • 基于YOLOP与GAN的图像修复与防御系统设计与实现
  • sqli-labs通关笔记-第24关 SQL二次注入(单引号闭合)
  • Scikit-learn高级功能与Python实践
  • 军工堡垒机国产化突围:打破国外垄断的三大技术流派
  • vue3项目搭建
  • VIKOR(Multi-criteria Optimization and Compromise Solution)简介与简单示例
  • 无人机图传:让天空视角 “触手可及”
  • Apache Ignite 的分布式原子类型(Atomic Types)
  • 【高阶版】R语言空间分析、模拟预测与可视化高级应用
  • 解密犯罪时间 - 华为OD统一考试(JavaScript 题解)
  • 自定义View和动画学习记录 抓娃娃机View
  • DataParallel (DP) DistributedDataParallel (DDP)
  • 15-TPS65261 4.5V 至 18V 输入电压、3A/2A/2A 输出电流三路同步降压转换器
  • 分布式时序数据库的特点解析
  • Three.js 完整实战项目:构建一个 3D 商品展示空间
  • UE5 打包Windows平台时无法找到SDK的解决方法
  • C# 基于halcon的视觉工作流-章25-椭圆查找
  • 【自动化运维神器Ansible】Ansible常用模块之service模块详解
  • C++ 赋值与交换法则
  • STM32 集成 USB 时出现 HAL_StatusTypeDef 未定义 的错误
  • STM32--DHT11(标准库)驱动开发
  • AI崛起后,对使用AI的一些小思考
  • LaTeX 下载安装保姆级教程
  • 异形设备前端适配挑战:条形屏/嵌入式终端的布局弹性与触控热区重构
  • 直播间里的酒旅新故事:内容正在重构消费链路
  • 亚马逊 Vine 计划:评论生态重构与合规运营策略
  • 《UE教程》第一章第九回——地图BGM