SerialPort Class
Represents a serial port resource.
Assembly: System (in System.dll)
Use this class to control a serial port file resource. This class provides synchronous and event-driven I/O, access to pin and break states, and access to serial driver properties. Additionally, the functionality of this class can be wrapped in an internal Stream object, accessible through the BaseStream property, and passed to classes that wrap or use streams.
The SerialPort class supports the following encodings: ASCIIEncoding, UTF8Encoding, UnicodeEncoding, UTF32Encoding, and any encoding defined in mscorlib.dll where the code page is less than 50000 or the code page is 54936. You can use alternate encodings, but you must use the ReadByte or Write method and perform the encoding yourself.
The following code example demonstrates the use of the SerialPort class to allow two users to chat from two separate computers connected by a null modem cable. In this example, the users are prompted for the port settings and a username before chatting. Both computers must be executing the program to achieve full functionality of this example.
Imports System Imports System.IO.Ports Imports System.Threading Public Class PortChat Shared _continue As Boolean Shared _serialPort As SerialPort Public Shared Sub Main() Dim name As String Dim message As String Dim sComparer As StringComparer = StringComparer.OrdinalIgnoreCase Dim readThread As Thread = New Thread(AddressOf Read) ' Create a new SerialPort object with default settings. _serialPort = New SerialPort() ' Allow the user to set the appropriate properties. _serialPort.PortName = SetPortName(_serialPort.PortName) _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate) _serialPort.Parity = SetPortParity(_serialPort.Parity) _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits) _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits) _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake) ' Set the read/write timeouts _serialPort.ReadTimeout = 500 _serialPort.WriteTimeout = 500 _serialPort.Open() _continue = True readThread.Start() Console.Write("Name: ") name = Console.ReadLine() Console.WriteLine("Type QUIT to exit") While (_continue) message = Console.ReadLine() If sComparer.Equals("quit", message) Then _continue = False Else _serialPort.WriteLine( _ String.Format("<{0}>: {1}", name, message)) End If end while readThread.Join() _serialPort.Close() End Sub Public Shared Sub Read() While (_continue) Try Dim message As String = _serialPort.ReadLine() Console.WriteLine(message) Catch ex As TimeoutException ' Do nothing End Try End While End Sub Public Shared Function SetPortName(ByVal defaultPortName As String) As String Dim newPortName As String Console.WriteLine("Available Ports:") Dim s As String For Each s In SerialPort.GetPortNames() Console.WriteLine(" {0}", s) Next s Console.Write("COM port({0}): ", defaultPortName) newPortName = Console.ReadLine() If newPortName = "" Then newPortName = defaultPortName End If Return newPortName End Function Public Shared Function SetPortBaudRate(ByVal defaultPortBaudRate As Integer) As Integer Dim newBaudRate As String Console.Write("Baud Rate({0}): ", defaultPortBaudRate) newBaudRate = Console.ReadLine() If newBaudRate = "" Then newBaudRate = defaultPortBaudRate.ToString() End If Return Integer.Parse(newBaudRate) End Function Public Shared Function SetPortParity(ByVal defaultPortParity As Parity) As Parity Dim newParity As String Console.WriteLine("Available Parity options:") Dim s As String For Each s In [Enum].GetNames(GetType(Parity)) Console.WriteLine(" {0}", s) Next s Console.Write("Parity({0}):", defaultPortParity.ToString()) newparity = Console.ReadLine() If newparity = "" Then newparity = defaultPortParity.ToString() End If Return CType([Enum].Parse(GetType(Parity), newParity), Parity) End Function Public Shared Function SetPortDataBits(ByVal defaultPortDataBits As Integer) As Integer Dim newDataBits As String Console.Write("Data Bits({0}): ", defaultPortDataBits) newDataBits = Console.ReadLine() If newDataBits = "" Then newDataBits = defaultPortDataBits.ToString() End If Return Integer.Parse(newDataBits) End Function Public Shared Function SetPortStopBits(ByVal defaultPortStopBits As StopBits) As StopBits Dim newStopBits As String Console.WriteLine("Available Stop Bits options:") Dim s As String For Each s In [Enum].GetNames(GetType(StopBits)) Console.WriteLine(" {0}", s) Next s Console.Write("Stop Bits({0}):", defaultPortStopBits.ToString()) newStopBits = Console.ReadLine() If newStopBits = "" Then newStopBits = defaultPortStopBits.ToString() End If Return CType([Enum].Parse(GetType(StopBits), newStopBits), StopBits) End Function Public Shared Function SetPortHandshake(ByVal defaultPortHandshake As Handshake) As Handshake Dim newHandshake As String Console.WriteLine("Available Handshake options:") Dim s As String For Each s In [Enum].GetNames(GetType(Handshake)) Console.WriteLine(" {0}", s) Next s Console.Write("Handshake({0}):", defaultPortHandshake.ToString()) newHandshake = Console.ReadLine() If newHandshake = "" Then newHandshake = defaultPortHandshake.ToString() End If Return CType([Enum].Parse(GetType(Handshake), newHandshake), Handshake) End Function End Class
- SecurityPermission
for the ability to call unmanaged code. Associated enumeration: UnmanagedCode
Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC
The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.