VS2005中SerialPort读到的数据有时候是反的?解决方案
VS2005中SerialPort读到的数据有时候是反的?对方发送的数据比如是 SA|DA20080624|TI104410| ,而我收到的
VS2005中SerialPort读到的数据有时候是反的?
对方发送的数据比如是" SA|DA20080624|TI104410| ",而我收到的是"|DA20080624|TI104410| SA",在超级终端中则正常!
接收代码如下:
VB.NET codePublic strData as String'Public Sub OnDataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Try Invoke(New EventHandler(AddressOf GetData)) Catch ex As Exception End Try End Sub'Public Sub GetData(ByVal sender As System.Object, ByVal e As System.EventArgs)Dim nums As Integer = Port1.BytesToReadIf nums > 0 Then For i = 1 To nums strData &= Chr(Port1.ReadChar) Next '处理数据...End IfEnd Sub
[解决办法]这个需不需要先序列化,然后再反序列化???
[解决办法]If nums > 0 Then
For i = 1 To nums
strData &= Chr(Port1.ReadChar)
Next
'处理数据...
End If
函数这样写是错的,如果在你接受的过程中还有新数据过来,就会出现有些字符反了,原因你还不明白吗?那我就解释给你听:
仅仅是举例:
假定你要发10个字符0,1,2...9 ,受到字符后产生事件,你处理的时候可能已经受到5个,01234,但是出一个个读取的,你本意是要读01234,当你读到第三个的时候,又有数据56过来了,你就会读成01256 ,下面我不用说了吧?
[解决办法]ReadExisting在读取字符串的时候可能会存在问题,如果字符编码是unicode,则会产生乱码。因为有可能DataReceive事件产生的时候,数据还没有全部发送过来。这个时候如果读取数据,得到的就是不完整的。
最好的办法是读取为字符缓冲区,按字节读取,然后将字节数组内容按指定的编码转换为String。