下面的代码示例演示了如何使用 SerialPort 类来允许两个用户从两台由 null 调制解调器电缆连接的单独计算机聊天。 在此示例中,系统会在聊天之前提示用户输入端口设置和用户名。 此代码示例是为 类提供的更大代码示例的 SerialPort 一部分。

public: static void Main() String^ name; String^ message; StringComparer^ stringComparer = StringComparer::OrdinalIgnoreCase; Thread^ readThread = gcnew Thread(gcnew ThreadStart(PortChat::Read)); // Create a new SerialPort object with default settings. _serialPort = gcnew 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 (stringComparer->Equals("quit", message)) _continue = false; _serialPort->WriteLine( String::Format("<{0}>: {1}", name, message) ); readThread->Join(); _serialPort->Close(); static void Read() while (_continue) String^ message = _serialPort->ReadLine(); Console::WriteLine(message); catch (TimeoutException ^) { } public static void Main() string name; string message; StringComparer stringComparer = StringComparer.OrdinalIgnoreCase; Thread readThread = new Thread(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 (stringComparer.Equals("quit", message)) _continue = false; _serialPort.WriteLine( String.Format("<{0}>: {1}", name, message)); readThread.Join(); _serialPort.Close(); public static void Read() while (_continue) string message = _serialPort.ReadLine(); Console.WriteLine(message); catch (TimeoutException) { } Public Shared Sub Main() Dim name As String Dim message As String Dim stringComparer__1 As StringComparer = StringComparer.OrdinalIgnoreCase Dim readThread As 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 stringComparer__1.Equals("quit", message) Then _continue = False _serialPort.WriteLine([String].Format("<{0}>: {1}", name, message)) End If End While readThread.Join() _serialPort.Close() End Sub Public Shared Sub Read() While _continue Dim message As String = _serialPort.ReadLine() Console.WriteLine(message) Catch generatedExceptionName As TimeoutException End Try End While End Sub

每个 SerialPort 对象只能存在一个打开的连接。

对于任何应用程序,最佳做法是在调用 Close 方法后等待一段时间,然后再尝试调用 Open 方法,因为端口可能不会立即关闭。