尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

C# SerialPort send and receive full example

C# SerialPort send and receive full example
📅 发布时间:2026/6/20 17:06:41
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

 

相关新闻

  • 自监督学习在医疗AI中的科技达成路径分析(中)
  • 进口微量粘度计代理商推荐,优质供应商分享
  • Apache Doris 内部数据裁剪与过滤机制的完成原理

最新新闻

  • 巧用自定义协议:将RTSP流无缝接入NVR并模拟GB28181通道
  • 保安赶走避雨母子,店家道歉够吗?3个追问直击核心
  • VScode调试按钮神秘消失?深入剖析C/C++插件IntelliSense Engine与setting.json的同步陷阱
  • 合肥理工学校招生电话多少?2026年6月21号最新发布! - 教育为先
  • 终极智能工具箱:League Akari 重新定义英雄联盟游戏体验
  • 2026年5月美国零售销售月率超预期

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号