VMWare多虚拟机共享虚拟串口通信

下载并安装 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);
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值