我现在用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

解决方案 »

  1.   

    VB的String是Unicode格式的,而传统的文本是ANSI+DBCS格式
    所以VB在读写外部数据时,对String的数据会进行自动转换,这样的自动转换经常会破坏数据
    现在我写通信程序决不用String,用Byte数组存放数据安全得多
      

  2.   

    把你的字符转化为asc码存储在byte数组里面,发送
      因为vb会自动吧asc转换为字符的!!
      

  3.   

    OnComm事件的处理代码修改成:Private Sub MSComm1_OnComm()
        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
      

  4.   

    2 楼说的对,用 string 是很不安全的做法。
      

  5.   

    咱俩遇到的问题很相似,我也是发送一组出去,结果只能收到前八位.
    再后面的一次接收就变成第一次发送的除前八位+头前八位.无奈ing