❶ 两台电脑间,COM口如何通信

class PortConnect
{
private static SerialPort port = new SerialPort();
string recvStr = "";
/// <summary>
/// 串口发送接收数据
/// </summary>
/// <param name="PortName">串口名</param>
/// <param name="BaudRate">波特率</param>
/// <param name="SendData">发送的数据</param>
/// <returns></returns>
public string SendAndReceiveData(string PortName, int BaudRate, string SendData)
{
port = new SerialPort();
recvStr = "";
//port.PortName = "COM1";
//port.BaudRate = 38400;
port.PortName = PortName;
port.BaudRate = BaudRate;
port.DataBits = 8;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.NewLine = "\r\n";
//port.ReadTimeout = 1000;
port.WriteTimeout = 1000;
port.Handshake = Handshake.None;
port.ReceivedBytesThreshold = 1;
port.RtsEnable = true;
port.DataReceived += new (com_DataReceived);//定义接受事件 try
{
port.Open(); string sendData = "";
sendData = SendData;
byte[] bs = strToToHexByte(sendData);
port.Write(bs, 0, bs.Length); Thread.Sleep(1000);
if (recvStr != "" && recvStr.Substring(9, 2) == "01")
MessageBox.Show("绑定成功!");
return recvStr;
}
catch (Exception e)
{
return e.ToString();
}
} /// <summary>
/// 接收数据事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void com_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
if (!port.IsOpen)
port.Open();
byte[] recvBytes = new byte[port.BytesToRead];
int bytes;
bytes = port.Read(recvBytes, 0, recvBytes.Length);
var tmprecvStr = Encoding.ASCII.GetString(recvBytes, 0, bytes);
byte[] tmp = Encoding.ASCII.GetBytes(tmprecvStr);
for (int i = 0; i < tmp.Length; i++)
{
recvStr += Convert.ToString(tmp[i], 16).PadLeft(2, '0') + " ";
}
if (recvStr != "")
recvStr.TrimEnd(' ');
port.Close();
Thread.Sleep(500);
} /// <summary>
/// 16进制字符串转字节数组
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
private static byte[] strToToHexByte(string hexString)
{
hexString = hexString.Replace(" ", "");
if ((hexString.Length % 2) != 0)
hexString += " ";
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2).Trim(), 16);
return returnBytes;
}
} 我曾经的一个项目中的串口通讯核心代码,你参考参考吧

❷ 请教:通讯端口COM1和COM2是干什么用的把它们后有什么后果

COM口即串行通讯端口。微机上的com口多为9针,最大速率115200bps。通常用于连接鼠标(串口)及通讯设备(如连接外置式MODEM进行数据通讯)等。但目前主流的主板一般都只带1个串口,甚至不带。

端口就是接口的意思。

1、端口是设备与外界通讯交流的出口。

2、USB口为数据端口、控制端口和状态端口。USB是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。

3、COM1、COM2、COM3都是COM口,即串行通讯端口,简称串口。

端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。硬件端口:CPU通过接口寄存器或特定电路与外设进行数据传送,这些寄存器或特定电路称之为端口。其中硬件领域的端口又称接口,如:并行端口、串行端口等。

网络端口:在网络技术中,端口(Port)有好几种意,集线器、交换机、路由器的端口指的是连接其他网络设备的接口,如RJ-45端口、Serial端口等。这里所指的端口不是指物理意义上的端口,而是特指TCP/IP协议中的端口,是逻辑意义上的端口。

COM端口:一块主板一般带有两个COM串行端口。通常用于连接鼠标及通讯设备(如连接外置式MODEM进行数据通讯)等,一台PC机上的COM端口连接器通常是9针公D-shells接口。COM针脚定义和RS-232C接口定义(DB9)一样。


(2)con通讯扩展阅读:

1、端口通常是指接口电路中的一些寄存器,这些寄存器分别用来存放数据信息、控制信息和状态信息,相应的端口分别称为数据端口、控制端口和状态端口。

2、电脑运行的系统程序,其实就像一个闭合的圆圈,但是电脑是为人服务的,他需要接受一些指令,并且要按照指令调整系统功能来工作,于是系统程序设计者,就把这个圆圈截成好多段,这些线段接口就叫端口(通俗讲是断口,就是中断)。

3、系统运行到这些端口时,一看端口是否打开或关闭,如果关闭,就是绳子接通了,系统往下运行,如果端口是打开的,系统就得到命令,有外部数据输入,接受外部数据并执行。

❸ 用VB怎么做COM口通讯`

Private Sub Command1_Click()
MSComm1.Output = "123456"
End Sub

Private Sub Form_Load()
MSComm1.PortOpen = True
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.InputMode = comInputModeText
Text1 = ""
End Sub

Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvSend
Text1 = "comEvSend"
Case comEvReceive
Text1 = "comEvReceive"
Case comEvCTS
Text1 = "comEvCTS"
Case comEvDSR
Text1 = "comEvDSR"
Case comEvCD
Text1 = "comEvCD"
Case comEvRing
Text1 = "comEvRing"
Case comEvEOF
Text1 = "comEvEOF"
End Select
End Sub

以下参考MSDN:
OnComm 常数
常数 值 描述
comEvSend 1 发送事件。
comEvReceive 2 接收事件。
comEvCTS 3 clear-to-send 线变化。
comEvDSR 4 data-set ready 线变化。
comEvCD 5 carrier detect 线变化。
comEvRing 6 振铃检测。
comEvEOF 7 文件结束。

MSComm 控件提供下列两种处理通讯的方式:

事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅 CommEvent 属性。
在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。
SThreshold 属性
在 MSComm 控件设置 CommEvent 属性为 comEvSend 并产生 OnComm 事件之前,设置并返回传输缓冲区中允许的最小字符数。
说明
若设置 Sthreshold 属性为 0(缺省值),数据传输事件不会产生 OnComm 事件。若设置 Sthreshold 属性为 1,当传输缓冲区完全空时,MSComm 控件产生 OnComm 事件。
如果在传输缓冲区中的字符数小于 value,CommEvent 属性设置为 comEvSend,并产生 OnComm 事件。comEvSend 事件仅当字符数与 Sthreshold 交叉时被激活一次。例如,如果 Sthreshold 等于 5,仅当在输出队列中字符数从 5 降到 4 时,comEvSend 才发生。如果在输出队列中从没有比 Sthreshold 多的字符,comEvSend 事件将绝不会发生。

CommEvent 属性包含实际错误或产生 OnComm 事件的数码。注意,设置 Rthreshold 或 Sthreshold 属性为 0,分别使捕获 comEvReceive 和 comEvSend 事件无效。

建立工程文件,在菜单工程(P)下拉菜单中选部件(O),在其属性页中找MICROSOFT COMM CONTROL6.0,对选钩方框打钩,就能在工具箱中出现电话机样的MSCOMM控件.将其添加到窗体上.
MSComm 控件
MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。
语法
MSComm
说明
MSComm 控件提供下列两种处理通讯的方式:
事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅 CommEvent 属性。
在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。
每个使用的 MSComm 控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个 MSComm 控件。可以在 Windows“控制面板”中改变端口地址和中断地址。
尽管 MSComm 控件有很多重要的属性,但首先必须熟悉几个属性。
属性 描述
CommPort 设置并返回通讯端口号。
Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
PortOpen 设置并返回通讯端口的状态。也可以打开和关闭端口。
Input 从接收缓冲区返回和删除字符。
Output 向传输缓冲区写一个字符串

详细请参阅MSDN和人民邮电出版社的"UISUAL BASIC 串口通讯工程开发实例导航"一书.其中有详细介绍.