我开发的程序是windows CE平台上面的。需要一个C# 串口发送接收的程序。我在网上看了很久,写了一些代码,但是还是不行。using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;namespace WindowsFormsApplication21
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
//更改参数
serialPort1.PortName = "COM17";
serialPort1.BaudRate = 9600;
serialPort1.StopBits = System.IO.Ports.StopBits.One;//停止位
serialPort1.Parity = System.IO.Ports.Parity.None;///校验位 serialPort1.Open(); SendStringData(serialPort1);
//也可用字节的形式发送数据 //开启接收数据线程
ReceiveData(serialPort1);
} private void SendStringData(SerialPort serialPort)
{
serialPort.Write(txtSend.Text );
} /// <summary>
/// 开启接受数据线程
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
///
private void ReceiveData(SerialPort serialPort)
{
//同步阻塞接受数据线程
Thread threadReceive = new Thread(new ParameterizedThreadStart(SynReceiveData));
threadReceive.Start(serialPort );
} private void SendBytesData(SerialPort serialPort)
{
byte[] bytesSend = System.Text.Encoding.Default.GetBytes(txtSend.Text );
serialPort.Write(bytesSend,0,bytesSend .Length );
}
// 同步阻塞读取
private void SynReceiveData(object serialPortobj)
{
//SerialPort serialPort = (SerialPort)serialPortobj;
serialPort1.ReadTimeout = 1200;
System.Threading.Thread.Sleep(1000);
try
{
byte firstByte = Convert.ToByte(serialPort1.ReadByte());
int bytesRead = serialPort1.BytesToRead;
byte[] bytesData = new byte[bytesRead + 1];
bytesData[0] = firstByte;
for (int i = 1; i <= bytesRead; i++)
bytesData[i] = Convert.ToByte(serialPort1.ReadByte());
MessageBox.Show("for循环执行!");
txtReceive.Text = System.Text.Encoding.Default.GetString(bytesData); }
catch (Exception ex)
{
MessageBox.Show("catch SynReceiveData:"+ex.Message );
//处理错误
}
serialPort1.Close();
}
//异步读取
private void AsyReceiveData(object serialPortobj)
{ SerialPort serialPort = (SerialPort)serialPortobj;
System.Threading.Thread.Sleep(500);
try
{
txtReceive.Text = serialPort.ReadExisting();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
//处理错误
}
serialPort.Close();
} private void Form1_Load(object sender, EventArgs e)
{ }
}
}上面这个程序是用来连接两台电脑进行测试的。下面这个是在本机上面进行测试的。把串口的第二第三两针短路就可以了。 private void btnSend_Click(object sender, EventArgs e)
{
SerialPort serialport1 = new SerialPort();
serialPort1.PortName = "COM17";
serialPort1.BaudRate = 9600;
serialPort1.StopBits = System.IO.Ports.StopBits.One;//停止位
serialPort1.Parity = System.IO.Ports.Parity.None;///校验位 serialPort1.Open();
byte[] data = Encoding.Unicode.GetBytes(txtSend.Text);
string str = Convert.ToBase64String(data );
serialPort1.Write(str );
MessageBox.Show("发送成功","系统提示");
byte[] data1 = Convert.FromBase64String(serialPort1.ReadLine()); 程序不能执行这一步
textBox2.Text = Encoding.Unicode.GetString(data1);
serialPort1.Close();
MessageBox.Show("数据发送成功", "系统提示");
}不知道错在哪里,另外,如果可能的话,请写一个串口测试程序看看,本人QQ191970570
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;namespace WindowsFormsApplication21
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
//更改参数
serialPort1.PortName = "COM17";
serialPort1.BaudRate = 9600;
serialPort1.StopBits = System.IO.Ports.StopBits.One;//停止位
serialPort1.Parity = System.IO.Ports.Parity.None;///校验位 serialPort1.Open(); SendStringData(serialPort1);
//也可用字节的形式发送数据 //开启接收数据线程
ReceiveData(serialPort1);
} private void SendStringData(SerialPort serialPort)
{
serialPort.Write(txtSend.Text );
} /// <summary>
/// 开启接受数据线程
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
///
private void ReceiveData(SerialPort serialPort)
{
//同步阻塞接受数据线程
Thread threadReceive = new Thread(new ParameterizedThreadStart(SynReceiveData));
threadReceive.Start(serialPort );
} private void SendBytesData(SerialPort serialPort)
{
byte[] bytesSend = System.Text.Encoding.Default.GetBytes(txtSend.Text );
serialPort.Write(bytesSend,0,bytesSend .Length );
}
// 同步阻塞读取
private void SynReceiveData(object serialPortobj)
{
//SerialPort serialPort = (SerialPort)serialPortobj;
serialPort1.ReadTimeout = 1200;
System.Threading.Thread.Sleep(1000);
try
{
byte firstByte = Convert.ToByte(serialPort1.ReadByte());
int bytesRead = serialPort1.BytesToRead;
byte[] bytesData = new byte[bytesRead + 1];
bytesData[0] = firstByte;
for (int i = 1; i <= bytesRead; i++)
bytesData[i] = Convert.ToByte(serialPort1.ReadByte());
MessageBox.Show("for循环执行!");
txtReceive.Text = System.Text.Encoding.Default.GetString(bytesData); }
catch (Exception ex)
{
MessageBox.Show("catch SynReceiveData:"+ex.Message );
//处理错误
}
serialPort1.Close();
}
//异步读取
private void AsyReceiveData(object serialPortobj)
{ SerialPort serialPort = (SerialPort)serialPortobj;
System.Threading.Thread.Sleep(500);
try
{
txtReceive.Text = serialPort.ReadExisting();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
//处理错误
}
serialPort.Close();
} private void Form1_Load(object sender, EventArgs e)
{ }
}
}上面这个程序是用来连接两台电脑进行测试的。下面这个是在本机上面进行测试的。把串口的第二第三两针短路就可以了。 private void btnSend_Click(object sender, EventArgs e)
{
SerialPort serialport1 = new SerialPort();
serialPort1.PortName = "COM17";
serialPort1.BaudRate = 9600;
serialPort1.StopBits = System.IO.Ports.StopBits.One;//停止位
serialPort1.Parity = System.IO.Ports.Parity.None;///校验位 serialPort1.Open();
byte[] data = Encoding.Unicode.GetBytes(txtSend.Text);
string str = Convert.ToBase64String(data );
serialPort1.Write(str );
MessageBox.Show("发送成功","系统提示");
byte[] data1 = Convert.FromBase64String(serialPort1.ReadLine()); 程序不能执行这一步
textBox2.Text = Encoding.Unicode.GetString(data1);
serialPort1.Close();
MessageBox.Show("数据发送成功", "系统提示");
}不知道错在哪里,另外,如果可能的话,请写一个串口测试程序看看,本人QQ191970570
建议使用
SerialPort.Read 方法 ( array<Byte []()>[], Int32, Int32)