Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8699503
  • 博文数量: 1413
  • 博客积分: 11128
  • 博客等级: 上将
  • 技术积分: 14685
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-13 10:03
个人简介

follow my heart...

文章分类

全部博文(1413)

文章存档

2013年(1)

2012年(5)

2011年(45)

2010年(176)

2009年(148)

2008年(190)

2007年(293)

2006年(555)

分类:

2006-10-24 11:35:38

点评:这个例子包括了这个控件几乎所有的操作,非常有参考价值.serialPort是在.net framework2.0中才有的东西,感觉这个东西和MSCOMM很相似.这里给出的例子是基于vb.net和CSHAPE
的,相应的可以在Cshape和c++中使用,基本上都是一样的.

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("Stop Bits({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

using System;
using System.IO.Ports;
using System.Threading;
 
public class PortChat
{
     static bool _continue;
     static SerialPort _serialPort;

      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;
             }
             else
              {
                 _serialPort.WriteLine(
                     String.Format("<{0}>: {1}", name, message) );
             }
         }

          readThread.Join();
         _serialPort.Close();
     }

      public static void Read()
     {
         while (_continue)
         {
             try
              {
                 string message = _serialPort.ReadLine();
                 Console.WriteLine(message);
             }
             catch (TimeoutException) { }
         }
     }

      public static string SetPortName(string defaultPortName)
     {
         string portName;

          Console.WriteLine("Available Ports:");
         foreach (string s in SerialPort.GetPortNames())
         {
             Console.WriteLine(" {0}", s);
         }

          Console.Write("COM port({0}): ", defaultPortName);
         portName = Console.ReadLine();

          if (portName == "")
         {
             portName = defaultPortName;
         }
         return portName;
     }

      public static int SetPortBaudRate(int defaultPortBaudRate)
     {
         string baudRate;

          Console.Write("Baud Rate({0}): ", defaultPortBaudRate);
         baudRate = Console.ReadLine();

          if (baudRate == "")
         {
             baudRate = defaultPortBaudRate.ToString();
         }

          return int.Parse(baudRate);
     }

      public static Parity SetPortParity(Parity defaultPortParity)
     {
         string parity;

          Console.WriteLine("Available Parity options:");
         foreach (string s in Enum.GetNames(typeof(Parity)))
         {
             Console.WriteLine(" {0}", s);
         }

          Console.Write("Parity({0}):", defaultPortParity.ToString());
         parity = Console.ReadLine();

          if (parity == "")
         {
             parity = defaultPortParity.ToString();
         }

          return (Parity)Enum.Parse(typeof(Parity), parity);
     }

      public static int SetPortDataBits(int defaultPortDataBits)
     {
         string dataBits;

          Console.Write("Data Bits({0}): ", defaultPortDataBits);
         dataBits = Console.ReadLine();

          if (dataBits == "")
         {
             dataBits = defaultPortDataBits.ToString();
         }

          return int.Parse(dataBits);
     }
     
     public static StopBits SetPortStopBits(StopBits defaultPortStopBits)
     {
         string stopBits;

          Console.WriteLine("Available Stop Bits options:");
         foreach (string s in Enum.GetNames(typeof(StopBits)))
         {
             Console.WriteLine(" {0}", s);
         }

          Console.Write("Stop Bits({0}):", defaultPortStopBits.ToString());
         stopBits = Console.ReadLine();

          if (stopBits == "")
         {
             stopBits = defaultPortStopBits.ToString();
         }

          return (StopBits)Enum.Parse(typeof(StopBits), stopBits);
     }

      public static Handshake SetPortHandshake(Handshake defaultPortHandshake)
     {
         string handshake;

          Console.WriteLine("Available Handshake options:");
         foreach (string s in Enum.GetNames(typeof(Handshake)))
         {
             Console.WriteLine(" {0}", s);
         }

          Console.Write("Stop Bits({0}):", defaultPortHandshake.ToString());
         handshake = Console.ReadLine();

          if (handshake == "")
         {
             handshake = defaultPortHandshake.ToString();
         }

          return (Handshake)Enum.Parse(typeof(Handshake), handshake);
     }
}

阅读(12835) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~