一、 SerialPort类的常用属性
名 称 |
说 明 |
BaseStream |
获取 SerialPort 对象的基础 Stream 对象 |
BaudRate |
获取或设置串行波特率 |
BreakState |
获取或设置中断信号状态 |
BytesToRead |
获取接收缓冲区中数据的字节数 |
BytesToWrite |
获取发送缓冲区中数据的字节数 |
CDHolding |
获取端口的载波检测行的状态 |
CtsHolding |
获取“可以发送”行的状态 |
DataBits |
获取或设置每个字节的标准数据位长度 |
DiscardNull |
获取或设置一个值,该值指示 Null 字节在端口和接收缓冲区之间传输时是否被忽略 |
DsrHolding |
获取数据设置就绪 (DSR) 信号的状态 |
DtrEnable |
获取或设置一个值,该值在串行通信过程中启用数据终端就绪 (DTR) 信号 |
Encoding |
获取或设置传输前后文本转换的字节编码 |
Handshake |
获取或设置串行端口数据传输的握手协议 |
IsOpen |
获取一个值,该值指示 SerialPort 对象的打开或关闭状态 |
NewLine |
获取或设置用于解释 ReadLine( )和WriteLine( )方法调用结束的值 |
Parity |
获取或设置奇偶校验检查协议 |
名 称 |
说 明 |
ParityReplace |
获取或设置一个字节,该字节在发生奇偶校验错误时替换数据流中的无效字节 |
PortName |
获取或设置通信端口,包括但不限于所有可用的 COM 端口 |
ReadBufferSize |
获取或设置 SerialPort 输入缓冲区的大小 |
ReadTimeout |
获取或设置读取操作未完成时发生超时之前的毫秒数 |
ReceivedBytesThreshold |
获取或设置 DataReceived 事件发生前内部输入缓冲区中的字节数 |
RtsEnable |
获取或设置一个值,该值指示在串行通信中是否启用请求发送 (RTS) 信号 |
StopBits |
获取或设置每个字节的标准停止位数 |
WriteBufferSize |
获取或设置串行端口输出缓冲区的大小 |
WriteTimeout |
获取或设置写入操作未完成时发生超时之前的毫秒数 |
二、方法
方 法 名 称 |
说 明 |
Close |
关闭端口连接,将 IsOpen 属性设置为False,并释放内部 Stream 对象 |
Open |
打开一个新的串行端口连接 |
Read |
从 SerialPort 输入缓冲区中读取 |
ReadByte |
从 SerialPort 输入缓冲区中同步读取一个字节 |
ReadChar |
从 SerialPort 输入缓冲区中同步读取一个字符 |
ReadLine |
一直读取到输入缓冲区中的 NewLine 值 |
ReadTo |
一直读取到输入缓冲区中指定 value 的字符串 |
Write |
已重载。将数据写入串行端口输出缓冲区 |
WriteLine |
将指定的字符串和 NewLine 值写入输出缓冲区 |
三、数据发送示例
Private Sub fasong()
serialPort1.PortName = "COM1"
serialPort1.BaudRate = 9600
serialPort1.Open()
Dim data As Byte() = Encoding.Unicode.GetBytes(textBox1.Text)
Dim str As String = Convert.ToBase64String(data)
serialPort1.WriteLine(str)
MessageBox.Show("数据发送成功!", "系统提示")
End Sub
四、接受示例
Private Sub jieshou()
Dim data As Byte() = Convert.FromBase64String(serialPort1.ReadLine())
textBox2.Text = Encoding.Unicode.GetString(data)
serialPort1.Close()
MessageBox.Show("数据接收成功!", "系统提示")
End Sub
五、通过串口关闭对方计算机
(1)新建一个项目,命名为Ex13_02,默认窗体为Form1。
(2)在Form1窗体中,主要添加两个Button控件,分别用于打开通信串口和关闭对方计算机。
(3)主要程序代码。
Private Sub button1_Click(sender As Object, e As EventArgs)
'打开串口
serialPort1.PortName = "COM1"
serialPort1.Open()
button1.Enabled = False
button2.Enabled = True
End Sub
'数据接收事件,等待接收关机命令
Private Sub serialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs)
Dim data As Byte() = Convert.FromBase64String(serialPort1.ReadLine())
Dim str As String = Encoding.Unicode.GetString(data)
serialPort1.Close()
If str = "关机" Then
Dim p As New Process()
p.StartInfo.FileName = "cmd.exe"
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardInput = True
p.StartInfo.RedirectStandardOutput = True
p.StartInfo.RedirectStandardError = True
p.StartInfo.CreateNoWindow = True
p.Start()
p.StandardInput.WriteLine("shutdown /s")
p.StandardInput.WriteLine("exit")
End If
End Sub
'发送关机命令
Private Sub button2_Click(sender As Object, e As EventArgs)
If button2.Text = "关闭计算机" Then
'发送关机命令数据
Dim data As Byte() = Encoding.Unicode.GetBytes("关机")
Dim str As String = Convert.ToBase64String(data)
serialPort1.WriteLine(str)
button2.Text = "取消关机"
Else
button2.Text = "关闭计算机"
button1.Enabled = True
button2.Enabled = False
'取消关机
Dim p As New Process()
p.StartInfo.FileName = "cmd.exe"
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardInput = True
p.StartInfo.RedirectStandardOutput = True
p.StartInfo.RedirectStandardError = True
p.StartInfo.CreateNoWindow = True
p.Start()
p.StandardInput.WriteLine("shutdown /a")
p.StandardInput.WriteLine("exit")
End If
End Sub