下载并安装 VSPD
Virtual Serial Port Driver
创建 Complex 把COM4 共享给 5 6 7
虚拟机绑定 5 6 7 串口.并移除打印机.
现在你在每个虚拟机里都会看到一个COM1
选择你熟悉的编程语言. 在物理机 对COM4 发送消息.并设置相同的波特率. 每台虚拟机都会同时收到数据了.
下面是一段C# 的C/S
服务器端:
using RJCP.IO.Ports;
using System;
using System.IO.Ports;
class Program
{
static void Main()
{
using (SerialPortStream serialPort = new SerialPortStream("COM4", 115200))
{
try
{
serialPort.Open();
while (true)
{
string currentTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
byte[] data = System.Text.Encoding.UTF8.GetBytes(currentTime + Environment.NewLine);
serialPort.Write(data, 0, data.Length);
System.Threading.Thread.Sleep(1000);
}
}
catch (Exception ex)
{
Console.WriteLine("发生异常: " + ex.Message);
}
}
}
}
客户端:
using RJCP.IO.Ports;
using System;
using System.IO.Ports;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
try
{
string com = Console.ReadLine();
using (SerialPortStream serialPort = new SerialPortStream(com, 115200))
{
try
{
// 使用 Task.Run 包装 Open 方法,以确保在异步上下文中运行
await Task.Run(() => serialPort.Open());
// 设置数据接收事件处理程序
serialPort.DataReceived += SerialPort_DataReceived;
Console.WriteLine($"{com}监听器已启动。按任意键退出。");
Console.ReadKey();
}
catch (Exception ex)
{
Console.WriteLine("发生异常: " + ex.Message);
}
}
}catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
private static void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
SerialPortStream serialPort = (SerialPortStream)sender;
// 从串口读取数据
byte[] buffer = new byte[serialPort.BytesToRead];
serialPort.Read(buffer, 0, buffer.Length);
// 将接收到的数据转换为字符串并打印到控制台
string receivedData = Encoding.UTF8.GetString(buffer);
Console.WriteLine($"收到数据:{receivedData}");
}
catch (Exception ex)
{
Console.WriteLine("处理数据时发生异常: " + ex.Message);
}
}
}