我编写了一个VB文件传送的程序 有四个功能键:发送字符串,接收字符串,发送文件,接收文件。还有一个子窗体用于改变串口参数设置的。(下面有图片供参看) 
运行后单独执行每个功能键都是好使的。但是在以下情况下“接收”功能键就不好使了: 
1、先执行“发送文件”,再去执行两个"接收”的功能键,这两个“接收”功能就不好使了,没有任何反应 
2、当先执行“串口设置”,再按“接收字符串”功能键就不好使了。“接收文件”是好使的。请问这是怎么回事!??
3、如果先执行了“接收文件”,再执行其他的功能,都是好使的。

解决方案 »

  1.   

    要搞清楚MSCOMM控件的特性,
    看自己的情况是采用查询还是oncomm事件去接受数据。
    查msdn看看那些属性是open态可以设置的,那些是open态禁止的。
    不知道你接受按钮事件中采用什么方式去接受数据。对于串口来的
    数据不确定时机的话,采用oncomm事件自动接受最好。
      

  2.   


    私信箱容量有限,内容被截断,只有 MSComm 初始化的一小部分。估计是你各个部分设置存在冲突。
      

  3.   

    Public intCommFlag  As Long
    'intCommFlag 是comm控件工作的标志
    Public blnFileTransFlag As Boolean    Public strFileDirectary As String   '文件路径Public strFileName As String        '文件名
    Public intFileLenth As Long         '文件长度Dim intFileNumber As Long           '文件号'*************************************************Dim intDataLenth As Long            '数据帧长度
    Dim intDataCount As Long            '数据帧总计数
    Dim intDataNumber As Long           '已经发送数据帧数'*************************************************
    Dim strSendFile As String           '"请求接收新文件"帧负载
    Dim bytSendFile() As Byte           '数据帧负载
    Dim bytFileBuffer() As Byte         '文件缓冲区Dim intFileReceiveLenth As Long     '已经接收文件的字节数Dim intReceiveLen As Long           '每次读入数据的字节数Dim bytReceive() As Byte            '接收到的数据帧负载'****************************************************
    '串口输入管理
    Public Sub InputManager()
        intCommFlag = 16
        
        Dim bytTest() As Byte
        Dim strReceive As String
        
        
        Dim intTest As Long
        
        Dim strTemp As String
        
        Main.MSComm1.InputMode = comInputModeBinary
        Main.MSComm1.InputLen = 6
        
        bytTest = Main.MSComm1.Input
        ReDim Preserve bytTest(5)                                           '获取帧头
        
        If bytTest(0) = 1 And bytTest(1) = 0 Then                           '收到信息帧
            intReceiveLen = bytTest(2) * 100 + bytTest(3)
            Main.MSComm1.InputMode = comInputModeText
            Main.MSComm1.InputLen = 0
            For n = 1 To 1000000                                            '延时
            Next n
            strReceive = Main.MSComm1.Input
            strTemp = "接收:" + strReceive
            Call Main.ReceiveDisplay(strTemp, 2)                         '调用信息显示
            
        ElseIf bytTest(0) = 0 And bytTest(1) = 1 Then                       '收到控制帧
            intTest = bytTest(2) * 100 + bytTest(3)                         '控制帧分析
            
            Select Case intTest
                Case 101                                                    '对方请求接收新文件
                    intReceiveLen = bytTest(4)
                    Main.MSComm1.InputMode = comInputModeText
                    Main.MSComm1.InputLen = intReceiveLen
                    Do
                    Loop While Main.MSComm1.InBufferCount < intReceiveLen
                    strFileName = Main.MSComm1.Input                   '接收文件名信息
                    
                    intReceiveLen = bytTest(5)
                    Main.MSComm1.InputLen = intReceiveLen
                    Do
                    Loop While Main.MSComm1.InBufferCount < intReceiveLen
                    strReceive = Main.MSComm1.Input                    '接收文件长度信息
                    
                    strReceive = LTrim(strReceive)
                    intFileLenth = Val(strReceive)                          '文件长度
                    
                    If MsgBox("对方发送文件" + strFileName + "," + Chr(13) + "文件大小为 " + Str(intFileLenth) + "字节" + Chr(13) + "是否接收?", vbOKCancel) = vbOK Then
                        Call FileReceiveManager(0)
                    End If
                    intCommFlag = 1
                    
                Case 100                                                    '对方通知放弃传输
                    
                Case 1                                                      '对方请求发送数据
                    If bytTest(4) = 1 Then                                  '请求发送数据包
                        intDataNumber = intDataNumber + 1
                        If intDataNumber > intDataCount Then
                            Call FileSendManager(4)                         '发送完成信号
                        Else
                            Call FileSendManager(1)                         '发送新一帧数据
                        End If
                    Else
                        Call FileSendManager(2)                             '重发上一帧数据
                    End If
                    intCommFlag = 1
                Case 0                                                      '接收到传输完毕信号
                    Call FileReceiveManager(4)
                    intCommFlag = 1
                    
                Case Else
                
            
            
            End Select
            
        ElseIf bytTest(0) = 0 And bytTest(1) = 0 Then                       '收到数据帧
            intCommFlag = 16
            intTest = bytTest(4) * 100 + bytTest(5)
            intReceiveLen = bytTest(2) * 100 + bytTest(3)                   '数据字节数
            Main.MSComm1.InputMode = comInputModeBinary
            Main.MSComm1.InputLen = intReceiveLen
            ReDim bytReceive(intReceiveLen - 1)
            Do
            Loop While Main.MSComm1.InBufferCount < intReceiveLen
            bytReceive = Main.MSComm1.Input
            
            If intTest = bytTest(2) + bytTest(3) Then                       '根据校验和作出响应
                
                Call FileReceiveManager(1)                                  '校验和正确请求发送新数据
            Else
                Call FileReceiveManager(2)                                  '校验和错请求重新发送
            End If
                
            intCommFlag = 1
            
        Else
            intCommFlag = 1
        End If
        
        
        
        intCommFlag = 1
    End Sub
      

  4.   

    '************************************************************
    '文件发送管理
    Public Sub FileSendManager(intFlag As Long)
        Dim bytTest(5) As Byte
        Dim bytSend() As Byte
        Dim intSendLen As Long
        
        Dim intProgress
       
        Select Case intFlag
            Case 0                                                          '发送新文件
                intCommFlag = 8
                
                intFileNumber = FreeFile
                Open strFileDirectary For Binary As #intFileNumber          '打开文件
                
                intFileLenth = LOF(intFileNumber)                           '获得文件长度
                
                
                ReDim bytFileBuffer(intFileLenth - 1)
                Get #intFileNumber, , bytFileBuffer                         '将文件读入缓冲区
                
                bytTest(0) = 0                                              '组织帧头
                bytTest(1) = 1
                bytTest(2) = 1
                bytTest(3) = 1
                bytTest(4) = Len(strFileName)
                bytTest(5) = Len(Str(intFileLenth))
                
                strSendFile = strFileName + Str(intFileLenth)               '负载中包含有文件名及长度信息
                
                Main.MSComm1.Output = bytTest                          '发送数据
                Main.MSComm1.Output = strSendFile
                
                intDataLenth = Main.GetOutBuffer \ 2                     '设置数据帧负载长度
                intDataCount = intFileLenth \ intDataLenth                  '计算数据帧数
                If intFileLenth - intDataLenth * intDataCount > 0 Then
                    intDataCount = intDataCount + 1
                End If
                
                intDataNumber = 1                                           '计数器设置初值
                ReDim bytSendFile(intDataLenth - 1)
                
                For n = 1 To intDataLenth
                    bytSendFile(n - 1) = bytFileBuffer(n - 1)               '准备第一帧数据
                Next n
                
                intCommFlag = 1
                
                
            Case 1                                                          '继续发送
                intCommFlag = 2
                
                If intDataNumber = intDataCount Then                        '计算数据帧负载长度
                    intSendLen = intFileLenth - intDataLenth * (intDataCount - 1)
                Else
                    intSendLen = intDataLenth
                End If
                
                ReDim bytSendFile(intSendLen - 1)
                
                For n = 1 To intSendLen                                     '加载数据
                    bytSendFile(n - 1) = bytFileBuffer(intDataLenth * (intDataNumber - 1) + n - 1)
                Next n
                
                ReDim bytSend(5 + intSendLen)
                For n = 1 To intSendLen
                    bytSend(n + 5) = bytSendFile(n - 1)
                Next n
                
                
                bytSend(0) = 0                                              '组织帧头
                bytSend(1) = 0
                bytSend(2) = intSendLen \ 100
                bytSend(3) = intSendLen - bytSend(2) * 100
                intSendLen = bytSend(2) + bytSend(3)
                bytSend(4) = intSendLen \ 100
                bytSend(5) = intSendLen - bytSend(4) * 100
                
                Main.MSComm1.Output = bytSend                          '发送数据帧
                
                intProgress = intDataNumber * 100 \ intDataCount            '更新进度条
               ' Main.progressbar1.Value = intProgress
                
                intCommFlag = 1
                
            
            Case 2                                                          '重新发送
                intCommFlag = 2
                
                
                If intDataNumber = intDataCount Then                        '计算数据帧负载长度
                    intSendLen = intFileLenth - intDataLenth * (intDataCount - 1)
                Else
                    intSendLen = intDataLenth
                End If
                
                ReDim Preserve bytSendFile(intSendLen - 1)                  '加载数据
                
                ReDim bytSend(5 + intSendLen)
                For n = 1 To intSendLen
                    bytSend(n + 5) = bytSendFile(n - 1)
                Next n
                
                
                bytSend(0) = 0                                              '组织帧头
                bytSend(1) = 0
                bytSend(2) = intSendLen \ 100
                bytSend(3) = intSendLen - bytSend(2) * 100
                intSendLen = bytSend(2) + bytSend(3)
                bytSend(4) = intSendLen \ 100
                bytSend(5) = intSendLen - bytSend(4) * 100
                
                Main.MSComm1.Output = bytSend                          '发送数据帧
                
                intProgress = intDataNumber * 100 \ intDataCount
                'Main.progressbar1.Value = intProgress                 '更新进度条
                
                intCommFlag = 1
            
            Case 4                                                           '完成
                intCommFlag = 8
                
                bytTest(0) = 0                                               '组织帧头
                bytTest(1) = 1
                bytTest(2) = 0
                bytTest(3) = 0
                bytTest(4) = 0
                bytTest(5) = 0
                
                Main.MSComm1.Output = bytTest                          '发送完成控制帧
                
                Close #intFileNumber                                        '关闭文件
                MsgBox ("发送完毕!")
                
                'Main.progressbar1.Value = 0                           '恢复进度条
                
                intCommFlag = 1
            
        
        End Select
        intCommFlag = 1
    End Sub
      

  5.   

    '文件接收管理
    '处理接收到的文件数据,重新拼装成文作
    '*******************************************************
    Public Sub FileReceiveManager(intFlag As Long)
        
        On Error GoTo FileError    Dim bytTest(5) As Byte
        
        Select Case intFlag
            Case 0                                                              '新文件
                intCommFlag = 8
                
                
                Call Main.save_Click                                  '选择存放路径
                intFileNumber = FreeFile
                strFileDirectary = MainCommonDialog1.FileName
                
                Open strFileDirectary For Binary As #intFileNumber              '打开(或新建)文件
                ReDim bytFileBuffer(intFileLenth - 1)                           '定义文件缓冲区
                intFileReceiveLenth = 0                                         '初始化文件长度计数器
                
                bytTest(0) = 0                                                  '组织帧头
                bytTest(1) = 1
                bytTest(2) = 0
                bytTest(3) = 1
                bytTest(4) = 0
                bytTest(5) = 0
                Main.MSComm1.Output = bytTest                              '请求发送数据
                
                
                
                intCommFlag = 1
                
            
            Case 1                                                              '继续接收,请求发送
                intCommFlag = 8
                
                For n = 1 To intReceiveLen
                    bytFileBuffer(intFileReceiveLenth + n - 1) = bytReceive(n - 1)
                Next n
                intFileReceiveLenth = intFileReceiveLenth + intReceiveLen
                
                bytTest(0) = 0                                                  '组织帧头
                bytTest(1) = 1
                bytTest(2) = 0
                bytTest(3) = 1
                bytTest(4) = 1
                bytTest(5) = 0
                Main.MSComm1.Output = bytTest                              '发送请求
                
                intProgress = intFileReceiveLenth * 100 \ intFileLenth          '更新进度条
                'Main.progressbar1.Value = intProgress
                
                intCommFlag = 1
                
            
            Case 2                                                              '请求重新发送
                intCommFlag = 8
                
                bytTest(0) = 0                                                  '组织帧头
                bytTest(1) = 1
                bytTest(2) = 0
                bytTest(3) = 1
                bytTest(4) = 0
                bytTest(5) = 0
                Main.MSComm1.Output = bytTest                              '发送重发请求
                
                intCommFlag = 1
            
            Case 4                                                              '完成
                Put #intFileNumber, , bytFileBuffer                             '把文件写入磁盘
                Close #intFileNumber                                            '关闭文件
                MsgBox ("接收完毕!")
                
                'Main.progressbar1.Value = 0                               '恢复进度条
                
                intCommFlag = 1
                
            
        End Select
        intCommFlag = 1
        
    FileError:
        
    End Sub
    以上是模块部分
      

  6.   

    Dim intCommPort As Long         '串口号
    Dim strCommSettings As String   '串口设置
    Dim intOutBufferSize As Long    '发送缓冲区大小
    Dim intInBufferSize As Long     '接收缓冲区大小Dim blnShowFlag As Boolean      '显示或隐藏文件传输窗体标志Dim intColorSet() As Long       '用于记录消息显示的格式
    Dim intArrayCount As Long       '用于记录消息显示的格式
    '************************************************Private Sub Command3_Click()
    abc = MSComm1.Input
        tt.Text = abc
    End SubPrivate Sub Command4_Click()
    rizhi.Show
    End SubPrivate Sub Command5_Click()
    config.ShowEnd Sub'************************************************
    '传输文件
    '响应“开始传输”按钮
    '************************************************Private Sub send_Click()
        On Error GoTo FileError
        
        If blnFileTransFlag = True And intCommFlag = 1 Then
            
            intCommFlag = 8
                Call FileSendManager(0)
            intCommFlag = 1
        End If
        
    FileError:                           '错误处理
        
        
        Select Case Err.Number
            Case 53
                MsgBox ("文件没有找到!")
        End Select
        If intCommFlag > 0 Then
            intCommFlag = 1
        Else
            
            MsgBox ("串口没有打开!")
        End If
        
    End Sub
    Private Sub cmdFileSend_Click()End Sub'************************************************
    '发送信息
    '响应“发送”按钮,发送信息
    '************************************************Public Sub xSend_Click()
    abc = tc.Text
        If MSComm1.PortOpen = True Then
        
        MSComm1.PortOpen = False
        End If
        MSComm1.Settings = "9600,N,8,1"
        MSComm1.PortOpen = True
        MSComm1.Output = abc
       intCommFlag = 1
        
    End Sub
    '************************************************
    '打开
    '打开标准对话框,选择待发送的文件
    '************************************************Private Sub open_Click()
       
        On Error GoTo Cancel
        Call option1_Click
        
        Main.CommonDialog1.ShowOpen
        strFileName = Main.CommonDialog1.FileTitle
        strFileDirectary = Main.CommonDialog1.FileName
        txtSend1.Text = strFileDirectary
        
    Cancel:
    End Sub'************************************************
    '保存
    '打开标准对话框,选择保存文件的路径
    '************************************************Public Sub save_Click()
        On Error GoTo Cancel
        Call option2_Click
        Main.CommonDialog1.ShowSave
        strFileDirectary = Main.CommonDialog1.FileName
        strFileName = Main.CommonDialog1.FileTitle
        
        txtReceive1.Text = strFileDirectary
        
        Open strFileDirectary For Append As #1
        Print #1, tt.Text
        Close #1Cancel:
    End Sub'**************************************************
    '打开串口,打开串行口并向用户显示相关信息
    '**************************************************Private Sub Command1_Click()
    If MSComm1.PortOpen = True Then    MSComm1.PortOpen = False
        End If
        MSComm1.Settings = "9600,N,8,1"
        MSComm1.RThreshold = 1
       
        MSComm1.PortOpen = True
        intCommFlag = 1
        
        
        'MSComm1.InputLen = 0End Sub'************************************************
    '关闭串口
    '************************************************Private Sub Command2_Click()    Call CommPortClose
        intCommFlag = 0
    End Sub'*************************************************
    '配置串口
    '响应菜单,打开参数设置窗体
    '*************************************************Private Sub ConfigPort_Click()
        frmConfig.Show
        
    End Sub
      

  7.   

    '加载主窗体,并对串口、标准对话框及进度条进行初始化设置
    '************************************************Private Sub Form_Load()
    Text1 = Winsock1.LocalIPIf MSComm1.PortOpen = False ThenMSComm1.PortOpen = TrueEnd If
    'abc = 0    
        blnShowFlag = True
        
        Main.Height = 7000
        
        Call SetComm("9600,N,8,1", 2, 4096)                 '串口设置
        intInBufferSize = 4096
        intOutBufferSize = 2048
        
        intCommFlag = 0                                     '初始系统状态
        
        Main.CommonDialog1.Flags = &H200000 Or &H2     '初始化标准对话框
        Main.CommonDialog1.CancelError = True
        
        blnFileTransFlag = False                            '初始发送接收标志
        
      
        
        intArrayCount = 0End Sub'*************************************************
    '设置串行口
    '为参数设置提供公共接口
    '*************************************************Public Sub SetComm(strSet As String, intPort As Long, intOutBuffer As Long)
        strCommSettings = strSet
        intCommPort = intPort
        intOutBufferSize = intOutBuffer
        
    End Sub'*************************************************
    '获取串行口设置
    '返回串口设置(波特率等)
    '*************************************************Public Function GetSettings() As String
        GetSettings = strCommSettings
        
    End Function'**************************************************
    '获取当前串口号
    '
    '**************************************************Public Function GetCommPort() As Long
        GetCommPort = intCommPort
        
    End Function
    '**************************************************
    '获取当前发送缓冲区大小
    '
    '**************************************************Public Function GetOutBuffer() As Long
        GetOutBuffer = intOutBufferSize
        
    End Function
    '*************************************************
    '打开串行口
    '
    '*************************************************Public Sub CommPortOpen()
        
        On Error GoTo PortError
        intCommPort = config.txtPort.Text
        
        
        MSComm1.CommPort = intCommPort                        '设置串行口号
        
        If MSComm1.PortOpen = True Then
            MSComm1.PortOpen = False
        End If
        MSComm1.Settings = strCommSettings                    '设置波特率.奇偶校验位.数据位和停止位
        MSComm1.InBufferSize = intInBufferSize                '设置接收缓冲区的字节长度
        
        MSComm1.InBufferCount = 0                             '清除接收缓冲区数据
        
        MSComm1.OutBufferSize = intOutBufferSize              '设置发送缓冲区字节长度
        MSComm1.OutBufferCount = 0                            '清除发送缓冲区数据
        MSComm1.RThreshold = 1                                '每次接收到字符即产生OnComm事件
        MSComm1.Handshaking = comRTSXOnXOff
        
        Main.MSComm1.InputLen = 100
        
        
            
        MSComm1.PortOpen = TruePortError:
        Select Case Err.Number
            Case 8005
                MsgBox ("该串口已经被占用,请换其它串口!")
        End SelectEnd Sub'*************************************************
    '关闭串行口
    '
    '*************************************************
    Public Sub CommPortClose()
        
        Dim strTemp As String
        
        If MSComm1.PortOpen = True Then
            MSComm1.PortOpen = False
            strTemp = "设置:关闭串行口!"
            Call ReceiveDisplay(strTemp, 3)
        Else
            strTemp = "设置:串行口已关闭!"
            Call ReceiveDisplay(strTemp, 3)
            
        End If
        
        
    End Sub'*************************************************
    'MSComm事件处理
    '响应MSComm事件作出相关处理
    '*************************************************Private Sub MSComm1_OnComm()
      Select Case MSComm1.CommEvent      
            Case comEvReceive
                
                If intCommFlag = 1 Then
                    
                    Call InputManager
                    intCommFlag = 1
                End If
                
        End Select
        
    End Sub'*************************************************
    '选择接收
    '准备接收文件
    '*************************************************Private Sub option2_Click()
        option2.Value = True
        blnFileTransFlag = False
    End Sub'*************************************************
    '选择发送
    '准备发送文件
    '*************************************************Private Sub option1_Click()
        option1.Value = True
        blnFileTransFlag = True
    End Sub
    '************************************************
    '响应按键
    '实现利用回车键即可发送消息的功能
    '************************************************Private Sub tc_KeyPress(KeyAscii As Integer)
        If KeyAscii = 13 Then
          Call Main.xSend_Click
          
        End If
    End Sub
    '************************************************
    '信息显示处理
    '记录发送接收及串口设置信息,保存显示格式(颜色)
    '************************************************Public Sub ReceiveDisplay(strAdd As String, intColor As Long)
        
        intArrayCount = intArrayCount + 2               '收到新信息,信息记录计数增加
        
        ReDim Preserve intColorSet(intArrayCount)       '重定义纪录数组,保留原有数据
        
       
        
    End Sub
    以上是主窗体
      

  8.   

    '子窗体部分
    Private Sub cmdCancel_Click()
        
        config.Hide
        Unload configEnd SubPrivate Sub cmdOk_Click()
            
        On Error GoTo SettingError
            
        intPort = Val(config.txtPort.Text)
        intTime = Val(config.txtTime.Text)
        strSet = config.txtSetting.Text
        
        
        
        If Not Main.MSComm1.PortOpen Then
            
            Main.MSComm1.CommPort = intPort
            Main.MSComm1.Settings = strSet
            Main.MSComm1.PortOpen = True
        End If
        
        If Not blnAutoSendFlag And Not blnReceiveFlag Then
            Main.MSComm1.PortOpen = False
        End If
        config.Hide
        Unload config
        
        Exit Sub
        
    SettingError:
        intPort = 2
        intTime = 1000
        strSet = "15600,n,8,1"
        config.Show
        config.txtPort.Text = Str(intPort)
        config.txtSetting.Text = strSet
        config.txtTime.Text = Str(intTime)
        
        MsgBox (Error(Err.Number))
        
    End Sub'****
    Private Sub Command1_Click()
    If MsgBox("确实要删除该项纪录吗?", vbYesNo, 询问) = vbYes Then
           strbf = Trim(cmbBf.Text)      '记录bfname
           strcj = Trim(cmbCj.Text)      '记录cjname
           strdate = Trim(cmbTime.Text)  '记录发生的日期date
           
           Dim rs As ADODB.Recordset
              Set rs = New ADODB.Recordset
           Dim mitem As ListItem
        
              rs.Open sqlGet, cn, adOpenStatic, adLockOptimistic
             If rs.RecordCount = 0 Then Exit Sub
            While Not rs.EOF
               Set mitem = lvwLog.FindItem(rs!bfname, , , lvwPartial)
              lvwLog.ListItems.Remove mitem.Index
              rs.Delete
              rs.MoveNext
            Wend
              
     End If
    End SubPrivate Sub Command2_Click()
    Unload rizhi
    End SubPrivate Sub ListView1_BeforeLabelEdit(Cancel As Integer)
     '单击 ColumnHeader 对象时,将根据
       '那一列的子项目把 ListView 控件排序。
       '设置 SortKey 为 ColumnHeader 的索引值减 1
       lvwLog.SortKey = ColumnHeader.Index - 1
       
       lvwLog.Sorted = True
       Select Case lvwLog.SortOrder
            Case lvwDescending
                 lvwLog.SortOrder = lvwAscending
            Case lvwAscending
                 lvwLog.SortOrder = lvwDescending
            Case Else
                 MsgBox ("error")
        End Select
    End Sub
    Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
        '单击 ColumnHeader 对象时,将根据
       '那一列的子项目把 ListView 控件排序。
       '设置 SortKey 为 ColumnHeader 的索引值减 1
       lvwLog.SortKey = ColumnHeader.Index - 1
          lvwLog.Sorted = True
         Select Case ListView1.SortOrder
            Case lvwDescending
                 ListView1.SortOrder = lvwAscending
            Case lvwAscending
                 ListView1.SortOrder = lvwDescending
            Case Else
                 MsgBox ("error")
        End Select
    End Sub
      

  9.   

    LZ:看你的代码非常吃力,不知为何接收不在MSComm1_OnComm事件中进行,而另搞接收按钮。估计你的代码是拼凑的。主窗体使用了MSComm控件,Winsock1控件等,要请别人分析,确实有不小的难度。
    我的意见,你的整个代码结构可参考“人民邮电出版社”的“VISUAL BASIC 串口通信工程实例开发导航”一书的“第1章  串口编程调试精灵”的代码写法。那个代码与你的非常接近。
      

  10.   

    谢谢你。我的程序也是一本书上的。VISUAL BASIC 串口通信技术与典型实例那本书上的。唉,我还做了小小改动。因为原来连运行都办不到。谢谢你了。