读取和发生串口数据

long_alon 2012-04-13 05:30:47

private void btnWrite_Click(object sender, EventArgs e)
{
this.serialPort1.PortName = "COM4";
this.serialPort1.BaudRate = 9600;
this.serialPort1.DataBits = 8;
this.serialPort1.Parity = System.IO.Ports.Parity.None;
this.serialPort1.StopBits = System.IO.Ports.StopBits.One;
if (this.serialPort1.IsOpen == false)
{
this.serialPort1.Open();
byte[] data = Encoding.Unicode.GetBytes(textBox3.Text);
string str = Convert.ToBase64String(data);
serialPort1.WriteLine(str);
MessageBox.Show("数据发送成功!","系统提示");




private void button2_Click(object sender, EventArgs e)
{ 第一种接收
byte[] data = Convert.FromBase64String(serialPort1.ReadLine());
textBox2.Text = Encoding.Unicode.GetString(data);
serialPort1.Close();
MessageBox.Show("数据接收成功!","系统提示");
第二种接收
int n = this.serialPort1.BytesToRead;
byte[] buf = new byte[n];
this.serialPort1.Read(buf, 0, n);
string receiveData = Encoding.ASCII.GetString(buf);
MessageBox.Show(receiveData.ToString());

}

为什么第二种接收没有数据? 第一种接收会卡在 byte[] data = Convert.FromBase64String(serialPort1.ReadLine()); 这一步? 求指教
...全文
194 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
long_alon 2012-04-17
  • 打赏
  • 举报
回复
也没有
[Quote=引用 3 楼 的回复:]

两种迹象表明缓冲区内无数据
你在serialPort1.WriteLine(str); 后马上读取,看看能不能读到数据
[/Quote]
orochiheart 2012-04-14
  • 打赏
  • 举报
回复
serialPort1.Read和serialPort1.ReadLine() 查查帮助看看有什么区别
bdmh 2012-04-14
  • 打赏
  • 举报
回复
两种迹象表明缓冲区内无数据
你在serialPort1.WriteLine(str); 后马上读取,看看能不能读到数据
orochiheart 2012-04-14
  • 打赏
  • 举报
回复
确定是那种写法么? 或是放在循环里read才行?
顽主小贝 2012-04-13
  • 打赏
  • 举报
回复
serialPort1.ReadLine()方法会一直读取到带有换行标识符为止,这和你的通讯协议有关!!!!建议参考下相关串口通讯的介绍。。。

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧