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

C# SerialPort send and receive full example

Install-Package System.IO.Ports;

 

//Sender.cs
using System.IO.Ports;
using System.Text;namespace ConsoleApp35
{internal class Program{static async Task Main(string[] args){await SerialPortSendAsync();Console.WriteLine("Sending Finished!");}static async Task SerialPortSendAsync(){using (SerialPort serialPort = new SerialPort("COM8", 115200, Parity.None, 8, StopBits.One)){serialPort.Handshake = Handshake.None;serialPort.Encoding = Encoding.UTF8;serialPort.NewLine="\r\n";try{serialPort.Open();serialPort.DiscardInBuffer();serialPort.DiscardOutBuffer();// 等 200 ms 让接收端订阅事件并稳定,然后开始发await Task.Delay(200); string msg = "";for (int idx = 1; idx < 100001; idx++){msg = $"[{idx}]_{Guid.NewGuid():N}";serialPort.WriteLine(msg);Console.WriteLine($"Send:{msg}");await Task.Delay(500);}}catch (Exception ex){Console.WriteLine(ex.Message);}finally{serialPort.Close();}}}}
}//Receiver.cs
using System.IO.Ports;
using System.Text;namespace ConsoleApp36
{internal class Program{static SerialPort serialPort;private static readonly object lockObject = new object();static StringBuilder buffer = new StringBuilder();static bool isFirstMessage = true;static void Main(string[] args){try{Console.WriteLine("Starting serial port receiver...");SerialPortReceive();Console.WriteLine("Press Enter to exit...");Console.ReadLine();Console.WriteLine("SerialPort receiving finished!");}catch (Exception ex){Console.WriteLine($"Error: {ex.Message}");}finally{serialPort?.Close();serialPort?.Dispose();}}static void SerialPortReceive(){serialPort = new SerialPort("COM9", 115200, Parity.None, 8, StopBits.One){Handshake = Handshake.None,Encoding = Encoding.UTF8,NewLine = "\r\n",ReadTimeout = 1000, // Increased timeoutDtrEnable = true,RtsEnable = true,};// Clear buffers BEFORE openingif (serialPort.IsOpen){serialPort.DiscardInBuffer();serialPort.DiscardOutBuffer();}serialPort.Open();// Clear buffers AFTER opening
            serialPort.DiscardInBuffer();serialPort.DiscardOutBuffer();// Initial synchronous read to catch the first messagetry{// Try to read first message synchronously with timeoutstring firstMessage = serialPort.ReadLine();lock (lockObject){Console.WriteLine($"*** FIRST MESSAGE (SYNC) *** Received: {firstMessage}");isFirstMessage = false;}}catch (TimeoutException){// No data available yet, continue with asyncConsole.WriteLine("No initial data, waiting for async messages...");}// Now subscribe to async eventsserialPort.DataReceived += SerialPort_DataReceived;Console.WriteLine("Receiver initialized and ready on COM9");}private static void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e){try{var sp = (SerialPort)sender;if (sp==null){return;}// Read all available datastring receivedData = sp.ReadExisting();buffer.Append(receivedData);// Process complete linesstring bufferContent = buffer.ToString();int newLineIndex;while ((newLineIndex = bufferContent.IndexOf("\r\n")) >= 0){string completeMessage = bufferContent.Substring(0, newLineIndex);bufferContent = bufferContent.Substring(newLineIndex + 2);// Handle first message specially if neededif (isFirstMessage){lock (lockObject){Console.WriteLine($"*** FIRST MESSAGE *** Received: {completeMessage}");isFirstMessage = false;}}else{lock (lockObject){Console.WriteLine($"Received: {completeMessage}");}}}buffer = new StringBuilder(bufferContent);}catch (Exception ex){lock (lockObject){Console.WriteLine($"Error in DataReceived: {ex.Message}");}}}}
}

 

 

 

 

image

 

 

 

image

 

http://www.rkmt.cn/news/22222.html

相关文章:

  • 自监督学习在医疗AI中的科技达成路径分析(中)
  • 进口微量粘度计代理商推荐,优质供应商分享
  • Apache Doris 内部数据裁剪与过滤机制的完成原理
  • 阿里面试:Redis挂了怎么办?集群 节点挂,怎么 恢复数据? 多长时间 的数据 可能 丢失?
  • 2025年石墨干燥机厂家推荐榜:真空干燥机/振动流化床干燥机/闪蒸干燥机高效环保成主流,这家企业凭实力登顶
  • 2025年空调系统/锅炉房运维服务厂家最新权威推荐榜:专业托管运维与设备维修外包服务深度解析
  • 混乱的置换 解题报告
  • 2025年10月环保板材品牌推荐:榜单聚焦西南龙头杰家
  • Dash to Dock
  • 2025年东莞脱模剂混合机厂家最新权威推荐榜:专业设备与高效服务深度解析,优质供应商联系方式全收录
  • 10 封装和继承的概念
  • 2025年破胶机厂家TOP企业品牌推荐排行榜,610,710,810,大型,自动型,低温环保,节能省电,自动打块,轮胎破胶机公司推荐
  • 2025年3C铝型材厂家行业标杆:船舶铝材/电力铝材/3C铝材廊坊国美铝业,21项专利加持,全品类适配获五星推荐
  • 2025智慧水务平台
  • 机惨
  • 消息队列常见问题克服(偏kafka)—顺序消费、消息积压、消息丢失、消息积压、分布式事务
  • 学霸的期末 解题报告
  • 详细介绍:FPGA实现SRIO图像视频传输,基于Serial Rapidlo Gen2,提供6套工程源码和技术支持
  • 禁用sentinel
  • 静态网站宣言:用IPFS重建开放网络的乐趣
  • Eclipse Mosquitto MQTT 代理中持久性引擎(database.c 概念)的作用分析报告 - 指南
  • 2023盘古石 物联网取证部分
  • 2025 年自润滑轴承厂家联系方式推荐,宁波索力特复合材料有限公司专业产品与可靠服务指南
  • MATLAB PSO-PF 融合滤波
  • iOS 26 崩溃日志导出全流程,多工具实践 辅助分析策略
  • 小白也能学会的 rime + 万象拼音 输入法安装教程
  • restful接口返回忽略字段 jackon的@JsonIgnore注解应用
  • 于鸿硕项目案例作业03
  • 元推理:自指自洽,无所住而生其心,良性循环就好
  • DA (Domain Adaptation,域适应)