using System;
using System.IO.Ports;
using System.Text;
namespace ConsoleApplication2
{
internal class Program
{
public static void Main(string[] args)
{
Console.WriteLine("可用串口列表:");
string[] ports = SerialPort.GetPortNames();
foreach (string port in ports)
{
Console.WriteLine(port);
}
Console.Write("请输入要连接的串口(例如COM3):");
string portName = Console.ReadLine();
SerialPort serialPort = new SerialPort(
portName: portName,
baudRate: 9600,
parity: Parity.None,
dataBits: 8,
stopBits: StopBits.One
);
serialPort.Encoding = Encoding.UTF8; // 设置编码格式
serialPort.ReadTimeout = 500; // 读取超时时间(毫秒)
serialPort.WriteTimeout = 500; // 写入超时时间(毫秒)
// 注册数据接收事件
serialPort.DataReceived += (sender, e) =>
{
var sp = (SerialPort)sender;
try
{
if (sp.IsOpen)
{
string data = sp.ReadExisting();
Console.WriteLine($"[接收] {data}");
}
}
catch (Exception ex)
{
Console.WriteLine($"接收数据时出错:{ex.Message}");
}
};
try
{
serialPort.Open();
Console.WriteLine("串口已成功打开。输入消息发送(输入 'exit' 退出)...");
}
catch (Exception ex)
{
Console.WriteLine($"打开串口失败:{ex.Message}");
return;
}
// 发送消息循环
string input;
do
{
input = Console.ReadLine() ?? "";
if (input.Equals("exit", StringComparison.OrdinalIgnoreCase))
break;
try
{
if (serialPort.IsOpen)
{
serialPort.WriteLine(input);
Console.WriteLine($"[发送] {input}");
}
else
{
Console.WriteLine("串口未打开,无法发送。");
}
}
catch (Exception ex)
{
Console.WriteLine($"发送数据时出错:{ex.Message}");
}
} while (true);
// 关闭串口(using语句会自动处理)
Console.WriteLine("程序退出。");
}
}
}