关于serialport的ReadLine()方法

steven0126 2010-12-08 02:37:46
小弟刚开始学习serialport,首先看的是百度百科里的serialport介绍:http://baike.baidu.com/view/2910631.htm,按照那个写了一个完全一样的例子,但是在执行第二button的时候,就死在serialPort1.ReadLine()语句那了,也不报错,窗体就死住了,不知道什么原因,请各位牛人帮解答。

实现过程
(1)新建一个项目,命名为Ex13_01,默认窗体为Form1。   
(2)在Form1窗体中,主要添加两个Button控件,分别用于执行发送数据和接受数据,添加两个TextBox控件,用于输入发送数据和显示接收数据。   
(3)主要程序代码。
private void button1_Click(object sender, EventArgs e)
{
serialPort1.PortName = "COM1";
serialPort1.BaudRate = 9600;
serialPort1.Open();

byte[] data = Encoding.Unicode.GetBytes(textBox1.Text);
string str = Convert.ToBase64String(data);
serialPort1.WriteLine(str);


MessageBox.Show("数据发送成功", "系统提示");
}

private void button2_Click(object sender, EventArgs e)
{
try
{
byte[] data = Convert.FromBase64String(serialPort1.ReadLine());
textBox2.Text = Encoding.Unicode.GetString(data);
serialPort1.Close();

MessageBox.Show("数据接收成功", "系统提示");
}
catch (Exception err)
{
MessageBox.Show(err.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
...全文
1929 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjh200102 2010-12-10
  • 打赏
  • 举报
回复
你要是想在本机做测试,要安装虚拟串口,还要买个USB转串口的接头。
这样在本机收发才能显示你要的。
steven0126 2010-12-10
  • 打赏
  • 举报
回复
感谢回复的各位,尤其是wuyazhe和tinghai88。主程序本身是没问题,使用VSPM新建虚拟串口后调试通过了,参考了http://blog.csdn.net/wydin/archive/2009/11/07/4782138.aspx
tinghai88 2010-12-09
  • 打赏
  • 举报
回复
楼主可以试试用VSPM来虚拟串口
minghunwu99 2010-12-09
  • 打赏
  • 举报
回复
6L的哥们说的很对,但是如果你用的是笔记本开发的话,你可能会看到一个串口,这个串口是可以自己发自己收的,你把你的serialPort1设为这个串口就行了。
兔子-顾问 2010-12-09
  • 打赏
  • 举报
回复
你自己发的当然是发给别人,自己怎么能收呢,就像电话,你把话筒和听筒连起来用的么?自己说话自己听?
你发的当然是发出去了,读的话需要别人写入串口你才可以。

有种做法,是把收发连起来,串口的2,3针脚短接。用作测试,自己发,自己收。
steven0126 2010-12-09
  • 打赏
  • 举报
回复
还有人能帮忙解决吗,继续求助~
steven0126 2010-12-08
  • 打赏
  • 举报
回复
string s = serialPort1.ReadExisting()测试得到s值为"",真不知道serialPort1.WriteLine(str)把值写到哪去了……
兔子-顾问 2010-12-08
  • 打赏
  • 举报
回复
文本框的多行模式选中了么?你可以不要用ReadLine,换用ReadExisting看是否有\r\n发过来。我可以肯定是没有\r\n,但至于如何操作导致的错误,无法推断。你自己检查测试方法中疏漏。
steven0126 2010-12-08
  • 打赏
  • 举报
回复
感谢wuyazhe,但是问题还是没有解决,serialPort1.WriteLine(str)写入的值是textBox1输入内容经过转换后的结果,我在textBox1中输入"www",然后输入回车,再点button1,或者直接输入"www\r\n",这样都不行,还是卡住了。另外ReadLine方法是不带参数的
兔子-顾问 2010-12-08
  • 打赏
  • 举报
回复
串口实际来的数据中不包含\r\n所以就会让ReadLine一直卡住等,直到收到\r\n,你检查一下你测试发送的地方,串口是不是没有发回车换行。

111,094

社区成员

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

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

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