问题描述
这是我的源代码,参考的网上的程序:但是可以成功发送数据,但是不能接收到数据(使用串口模拟软件可以显示接收到数据,但是是乱码),大家帮忙看下,感谢!代码:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingSystem.IO.Ports;namespaceCsharp串口通信2{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}SerialPortserialPort1=newSerialPort();privatevoidSend_Click(objectsender,EventArgse){serialPort1.PortName="COM1";serialPort1.BaudRate=9600;serialPort1.Open();byte[]data=Encoding.Unicode.GetBytes(textBox1.Text);stringstr=Convert.ToBase64String(data);serialPort1.WriteLine(str);MessageBox.Show("数据发送成功!","系统提示");}privatevoidReceive_Click(objectsender,EventArgse){byte[]data=Convert.FromBase64String(serialPort1.ReadLine());textBox2.Text=Encoding.Unicode.GetString(data);serialPort1.Close();MessageBox.Show("数据接收成功!","系统提示");}}}
解决方案
解决方案二:
先弄清楚读取的数据是什么格式的
解决方案三:
serialPort1.ReadLine()需要读取到换行(换行是rn或n在于你的设定),你读取到的信息有这样的结尾吗
解决方案四:
串口操作有二进制模式和文本模式,serialport有个属性设置一下,再试试
解决方案五:
跟端口号和波特率有关系吧
解决方案六:
无规律带中文的乱码一般是数据线坏了,其他有规律的码,一般是接收到的byte没有使用适当的编码转成字符串
解决方案七:
估计你是用虚拟串口软件测试的,那么我们就要问一下了,你虚拟软件怎么配置的,那个是发送端口,那个是接收端口
解决方案八:
也就是说,你是给com1发了,不过谁接收呢?总不会是com1自己发给自己吧所以如果是虚拟串口软件,他都成对配置的一个com3发,另一个com4接(反之一样)另外所谓的乱码,就看你怎么看了,如果你认为显示成二进制FF01这样就是乱码,我们就没办法了,如果显示的是文本模式他不是你认为的东西,那就是波特率有问题
解决方案九:
串口数据的接收需要在确定的波特率下,一般是按byte读取的,然后再按照协议结构来分解。
解决方案十:
引用6楼wanghui0380的回复:
估计你是用虚拟串口软件测试的,那么我们就要问一下了,你虚拟软件怎么配置的,那个是发送端口,那个是接收端口
我是COM1发送,COM2接收的
解决方案十一:
引用7楼wanghui0380的回复:
也就是说,你是给com1发了,不过谁接收呢?总不会是com1自己发给自己吧所以如果是虚拟串口软件,他都成对配置的一个com3发,另一个com4接(反之一样)另外所谓的乱码,就看你怎么看了,如果你认为显示成二进制FF01这样就是乱码,我们就没办法了,如果显示的是文本模式他不是你认为的东西,那就是波特率有问题
COM1发送消息,COM2接收消息的,这是网上找的代码,不明白为什么接收不到数据
解决方案十二:
你这个功能是从com1口发送数据然后读取返回到com1口的数据和com2口没有关系。