c#利用SerialPort 控件实现PC与PC串口通信
1、新建一个项目
添加 5 个Label控件、 3个button控件、2个 SerialPort、2个textbox、1个timer

2、根据下表设定好控件属性

3、//程序所有代码
//复制下列代码到visual studio中
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Collections;
using System.Diagnostics;
namespace 利用SerialPort_控件实现PC与PC串口通信
{
//需要两台计算机同时运行该软件
//若没有两台计算机,可以通过安装虚拟串口工具 Virtual Serial Port Driver
//本例就是通过 Virtual Serial Port Driver 工具模拟
public partial class COMForm : Form
{
public COMForm()
{
InitializeComponent();
}
//定义变量
public string strPortName1;
public string strPortName2;
public int strBaudRate;
public string data;
//初始化串口
private void COMForm_Load(object sender, EventArgs e)
{
//获取电脑串口号,加载到选择框中
CmbPortName1.DataSource = System.IO.Ports.SerialPort.GetPortNames();
CmbPortName2.DataSource = System.IO.Ports.SerialPort.GetPortNames();
//获取波特率
CmbBaudRate.SelectedIndex = 1;
CmdCloseSerialPort.Enabled = false ;
}
//打开串口
private void CmdOpenSerialPort_Click(object sender, EventArgs e)
{
CmdOpenSerialPort.Enabled = false;
CmdCloseSerialPort.Enabled = true;
//获取串口名
strPortName1 = CmbPortName1.SelectedItem.ToString();
strPortName2 = CmbPortName2.SelectedItem.ToString();
//获取波特率
strBaudRate = Convert.ToInt32(CmbBaudRate.SelectedItem.ToString());
//打开串口
serialPort1.PortName = strPortName1;
serialPort1.BaudRate = strBaudRate;
//若串口1已打开,则返回
serialPort1.Open();
//打开串口
serialPort2.PortName = strPortName2;
serialPort2.BaudRate = strBaudRate;
serialPort2.Open();
//如果打开成功,则提示
if (serialPort1.IsOpen)
{
MessageBox.Show(strPortName1 +"打开成功","提示");
}
if (serialPort2.IsOpen)
{
MessageBox.Show(strPortName2 + "打开成功", "提示");
}
}
private void Cmdsend_Click(object sender, EventArgs e)
{
string outdata = Textsend.Text;
if (outdata == "")
{
MessageBox.Show("发送的数据不能为空!","提醒!",MessageBoxButtons.OK,MessageBoxIcon.Warning );
}
serialPort1.Write(outdata );
}
//触发事件,接收数据
//private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
//{
// data = serialPort1.ReadExisting();
// this.Invoke(new EventHandler(DisplayText));
//}
//显示数据
private void DisplayText(object sender, EventArgs e)
{
TextReceive.Text = TextReceive.Text + data;
}
//关闭串口,退出程序
private void CmdCloseSerialPort_Click(object sender, EventArgs e)
{
serialPort1.Close();
serialPort2.Close();
CmdOpenSerialPort.Enabled = true;
}
private void COMForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen) serialPort1.Close();
if (serialPort2.IsOpen) serialPort2.Close();
Process.GetCurrentProcess().Kill();
}
private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
data = serialPort2.ReadExisting();
this.Invoke(new EventHandler(DisplayText));
}
}
}