我现在用MSCOMM做连接。一侧用的是XP自带的“超级终端”,另一侧用VB的MSCOMM。
在“超级终端”发送的数据是 “%23%20%34%34%35%” 。
但是在VB一侧,用MSCOMM接收的数据就有可能变为“%32%43%5”。
就是隔一位,取一个字节的代码。这是为什么呀??
下面是我的代码,请大家帮我看看。是不是少什么东西,或者属性的设置有点问题。 谢谢
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.RTSEnable = 1
MSComm1.RThreshold = 1
MSComm1.InputMode = 0
MSComm1.InputLen = 1
MSComm1.InBufferSize = 4096
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Dim strfile As String * 1
Dim aa As String
Select Case MSComm1.CommEvent
Case comEvReceive
strfile = MSComm1.Input
If strfile = "C" Or strfile = Chr(13) Or strfile = "%" Then
aa = strmessage
Call pp(aa)
strmessage = vbNullString
End If
strmessage = strmessage & strfile
l = Len(strmessage)
MSComm1.InBufferCount = 0
strfile = vbNullString
End Select
End Sub
在“超级终端”发送的数据是 “%23%20%34%34%35%” 。
但是在VB一侧,用MSCOMM接收的数据就有可能变为“%32%43%5”。
就是隔一位,取一个字节的代码。这是为什么呀??
下面是我的代码,请大家帮我看看。是不是少什么东西,或者属性的设置有点问题。 谢谢
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.RTSEnable = 1
MSComm1.RThreshold = 1
MSComm1.InputMode = 0
MSComm1.InputLen = 1
MSComm1.InBufferSize = 4096
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Dim strfile As String * 1
Dim aa As String
Select Case MSComm1.CommEvent
Case comEvReceive
strfile = MSComm1.Input
If strfile = "C" Or strfile = Chr(13) Or strfile = "%" Then
aa = strmessage
Call pp(aa)
strmessage = vbNullString
End If
strmessage = strmessage & strfile
l = Len(strmessage)
MSComm1.InBufferCount = 0
strfile = vbNullString
End Select
End Sub
所以VB在读写外部数据时,对String的数据会进行自动转换,这样的自动转换经常会破坏数据
现在我写通信程序决不用String,用Byte数组存放数据安全得多
因为vb会自动吧asc转换为字符的!!
Dim strfile As String
Dim iLoop As Integer
Dim sChar As stirng
Dim aa As String
Select Case MSComm1.CommEvent
Case comEvReceive
strfile = MSComm1.Input
For iLoop = 1 To Len(strfile)
sChar = Mid(strfile, iLoop, 1)
If sChar = "C" Or sChar = Chr(13) Or sChar = "%" Then
aa = strmessage
Call pp(aa)
strmessage = vbNullString
End If
Next iLoop
strmessage = strmessage & sChar
l = Len(strmessage)
End Select
End Sub
再后面的一次接收就变成第一次发送的除前八位+头前八位.无奈ing