C# SerialPort send and receive full example

news/2025/10/16 13:26:01/文章来源:https://www.cnblogs.com/Fred1987/p/19145403
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.mzph.cn/news/938194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自监督学习在医疗AI中的科技达成路径分析(中)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

The World of Torrents (How it Works?)

https://forums.torrentleech.org/t/the-world-of-torrents-how-it-works/10189The World of Torrents (How it Works?) General discussionApr 201120d​PeterPindokoSuper User1 Apr 2011I found this somewhere an…

进口微量粘度计代理商推荐,优质供应商分享

在实验室的微观世界里,一滴液体的粘度变化可能预示着重大科学发现或技术突破。微量粘度计正是打开这扇微观世界大门的钥匙。   在现代工业研发和质控领域,对微量样品的精确粘度测量需求日益增长。无论是珍贵的生物…

进口高温高压粘度计优质供应商,粘度计代理商推荐

在地下数千米的石油储层中,在化工生产的高温反应釜里,精确的粘度测量正成为能源开发和工业生产的关键技术瓶颈。   高温高压环境下的粘度测量是能源、化工、新材料等领域的核心技术需求。常规粘度计无法在条件下正…

Apache Doris 内部数据裁剪与过滤机制的完成原理

Apache Doris 内部数据裁剪与过滤机制的完成原理pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

2025 年循环烘箱厂家推荐榜:热风循环烘箱厂家聚焦节能智能,这家企业成多行业优选

随着制造业智能化升级,工业烘干设备作为关键生产环节的核心装备,市场需求持续攀升。2025 年工业烘箱市场规模预计保持高速增长,其中热风循环烘箱因适配性强,在食品、医药、电子等领域渗透率不断提升。但市场扩容也…

2598. 执行操作后的最大 MEX——模运算

题目 给你一个下标从 0 开始的整数数组 nums 和一个整数 value 。 在一步操作中,你可以对 nums 中的任一元素加上或减去 value 。 例如,如果 nums = [1,2,3] 且 value = 2 ,你可以选择 nums[0] 减去 value ,得到 n…

2025通风天窗厂家推荐正鑫,专业定制工业厂房通风排烟系统

2025年专业通风天窗厂家推荐:工业厂房通风排烟系统定制指南当前工业厂房通风系统面临的技术挑战在现代工业厂房建设中,通风天窗、排烟天窗、通风气楼等设备承担着至关重要的环境调节功能。然而,随着工业建筑规模的不…

阿里面试:Redis挂了怎么办?集群 节点挂,怎么 恢复数据? 多长时间 的数据 可能 丢失?

本文 的 原文 地址 原始的内容,请参考 本文 的 原文 地址 本文 的 原文 地址 尼恩说在前面 在45岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、…

pg_resetwal 使用简介 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Ubuntu 上安装 PHP 环境

在 Ubuntu 24.04 LTS 上安装 PHP 7.4 及常用环境(Nginx、MySQL、Redis)。 Ubuntu 24.04 默认 APT 源里的 PHP 版本很可能是 8+,所以我们需要通过 第三方 PPA(如 Ondřej Sur 的 PHP PPA) 来安装 7.4。1️⃣ 添加 …

2025年工业陶瓷厂家 TOP 企业品牌推荐排行榜,工业陶瓷,氧化铝陶瓷推荐这十家公司!

工业陶瓷作为现代工业中不可或缺的关键材料,凭借其高硬度、耐高温、耐腐蚀、绝缘等卓越性能,在航天、能源、电子、化工等众多领域发挥着极为重要的作用。近年来,随着各行业对材料性能要求的不断提升以及新材料技术的…

2025年石墨干燥机厂家推荐榜:真空干燥机/振动流化床干燥机/闪蒸干燥机高效环保成主流,这家企业凭实力登顶

随着制造业向自动化、绿色化转型,干燥设备作为关键工艺环节,在化工、新能源、医药等行业中的需求持续增长。2025年,市场对干燥系统的能效、环保适配性及服务质量提出了更高要求。为帮助企业精准选型,我们基于行业技…

2025年空调系统/锅炉房运维服务厂家最新权威推荐榜:专业托管运维与设备维修外包服务深度解析

2025年空调系统/锅炉房运维服务厂家最新权威推荐榜:专业托管运维与设备维修外包服务深度解析随着现代建筑设施日益复杂化,空调系统与锅炉房运维服务已成为保障企业正常运营的关键环节。专业的运维服务不仅能确保设备…

混乱的置换 解题报告

简要题意 给定一个长度为 \(n\) 的序列 \(a\),值域为 \([0,m]\)。将该序列循环右移 \(1\) 位,并记录下当前序列,重复该过程 \(n\) 次。将得到的序列按字典序升序排序,构成一个 \(n \times n\) 的矩阵,给出该矩阵的…

我42岁才顿悟:穷人的富养是带娃到处旅游,富人的富养是教会这一项本事

"15岁儿子连护照都没有的商业巨擘告诉我:真正的富养不是环游世界,而是培养深度钻研能力。当我炫耀带女儿去过20国时,他一句话戳破了百万教育投资的泡沫——旅行是最简单的富养方式,本质上是偷懒。"引言站…

2025年10月环保板材品牌推荐:榜单聚焦西南龙头杰家

在选择环保板材品牌时,关键在于找到最适合自身实际需求的解决方案。中国林产工业协会《2024中国人造板产业报告》显示,2023年全国规模型饰面人造板产量4.1亿平方米,其中ENF级环保板材占比首次突破28%,终端用户满意…

Dash to Dock

https://extensions.gnome.org/extension/307/dash-to-dock/

2025 年碳纤维布厂家 TOP 企业品牌推荐排行榜,碳纤维布 / 建筑碳纤维布 / 加固碳纤维布 / 300 克碳纤维布 / 碳纤维加固布公司推荐!

在当前建筑加固行业快速发展的背景下,碳纤维布作为关键加固材料,其市场需求持续攀升,但行业也面临着诸多亟待解决的问题。一方面,市场上碳纤维布产品质量参差不齐,部分厂家为降低成本,生产的产品在抗拉强度、耐老…

fastjson转换json时,碰到的那些首字母大小写转换的坑

fastjson转换json时,碰到的那些首字母大小写转换的坑转自:java - fastjson转换json时,碰到的那些首字母大小写转换的坑! - agamem - SegmentFault 思否在api的处理过程里面,bean转换成json时,我们总是希望字段名…