Msrec为MSCOM控件,现在要用WINSOCKET控件,属性protocol为TCP ,代码如何修改? 
Private Sub Msrec_OnComm()  
On Error GoTo Sendfast  
Select Case Msrec.CommEvent  
Case comEvReceive '只要收到一个字节就触发此事件  
DC = 0  
'Msrec.RThreshold = 0 '停止触发此事件以防止数据处理过程被意外中断  
If (IDf = False) And (IDbg = 0) Then '还未建立连接。  
    
    Inst = Msrec.Input '读入一个字节到临时变量  
    Ins(0) = Inst(0) '转存为字节型变量  
    InsD = Ins(0) '赋值给整型变量,此时数据为十进制---如:收到数据为A0,此变量为160。      If InsD = 2 Then '判断是否为起始符号  
    BakD(0) = &H10 '发送确认信号,以驱动发送方发送有效数据  
    Msrec.Output = BakD  
      
    'Text9.Text = Timer()  
      
    'FrmMe.Tmt.Enabled = True  '暂用代码  
      
    IDbg = 1  
    ElseIf InsD   <> 2 Then  
    Msrec.InBufferCount = 0 '如果缓存中有数据但由于意外断开,将清零以重新接收  
    End If '报文开始  
      
End If '判断连接  
'TmL.Enabled = True  
If (Msrec.InBufferCount > 10) And (IDf = False) And (IDbg = 1) Then IDf = True '说明一次收到很多数据,已经建立连接,有大量数据送至  Do While (Msrec.InBufferCount > 0) And (IDf = True)  
  'If IDbg = 1 Then Text9.Text = Timer()  
    
  Inst = Msrec.Input '读入一个字节到临时变量  
  Ins(0) = Inst(0) '转存为字节型变量  
  InsD = Ins(0) '赋值给整型变量,此时数据为十进制---如:收到数据为A0,此变量为160。

解决方案 »

  1.   

    了解下TCP协议和VB实现。MSDN上怎么使用winSocket控件的例子非常非常详细。你贴了这些不全的代码就全指望别人帮你修改?别老想着偷懒没进步的。
      

  2.   

    谢谢啊,你的忠告我一定牢记的.我没贴所有代码也只是向各位请教下,串口和TCP接收数据时有什么不同?
    上面的代码是整个过滤代码的一小段,我现在已经使用WINSOCKET控件了,过滤代码是不是应该放在DataArrival事件中?
    如果是的话,为什么数据没显示?
    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    dim Num as byte
    Winsock1.GetData Num
    text1.text=Num
    ====过滤程序================
    知道的请说下,麻烦大家了 
      

  3.   

    串口通讯是双向的。TCP是Server/client结构的,一端作为服务器端,一端作为客户端客户端做的流程是连接(connect)-发送(send data)-关闭(close)
    举例:
    Winsock2.RemoteHost = "127.0.0.1"
    Winsock2.RemotePort = 4000
    Winsock2.Connect
    'Winsock2.SendData ("nihao")服务器端设置端口(LocalPort)-侦听(Listen)-接受连接(accept)-发送/接受-关闭连接
    举例:
    Winsock3.LocalPort = 4000
    Winsock3.Listen
    Private Sub Winsock3_ConnectionRequest(ByVal requestID As Long)
    Winsock3.Accept (requestID)
    End Sub
    其中发送,连接的时候还要分析下 winsock.state 去
    常数   值   描述     
      sckClosed   0   缺省的。关闭     
      sckOpen   1   打开     
      sckListening   2   侦听     
      sckConnectionPending     3   连接挂起     
      sckResolvingHost     4   识别主机     
      sckHostResolved     5   已识别主机     
      sckConnecting     6   正在连接     
      sckConnected     7   已连接     
      sckClosing     8   同级人员正在关闭连接     
      sckError     9   错误     
      

  4.   

    给个例子代码,自己分析
    ==========================服务端=============================== 
    Private Sub Form_Load() 
    Winsock1.Protocol = sckTCPProtocol 
    Winsock1.LocalPort = 19878 
    Winsock1.Listen 
    End Sub Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long) 
        Winsock1.Accept requestID 
        Winsock1.SendData "OK" 
    End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) 
    dim str as string 
        Winsock1.GetData str 
        If str = "Q" Then 
            Winsock1.Close 
            Winsock1.LocalPort = 19878 
            Winsock1.Listen 
        End If 
    End Sub ===========================客户端=============================== 
    Private Sub Command1_Click() 
        Command1.Enabled = False 
        Command2.Enabled = True 
        If Text1.Text = "" Then 
        MsgBox "IP不能为空" 
        Else 
        Winsock1.Connect Text1.Text, 19878 
        End If 
        If Winsock1.State = sckConnecting Then Label2.Caption = "正连接" 
        If Winsock1.State = sckClosed Then Label2.Caption = "失  败" 
    End Sub Private Sub Command2_Click() 
        Command1.Enabled = True 
        Command2.Enabled = False 
        If Winsock1.State = sckClosed Then 
        MsgBox "未连接" 
        ElseIf Winsock1.State = sckConnected Then 
        Label2.Caption = "已断开" 
        Winsock1.SendData "Q" 
        Timer1.Enabled = True 
        End If 
    End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) 
        Winsock1.GetData str 
        If str = "OK" Then 
            Label2.Caption = "已连接" 
        End If 
    End Sub 
      

  5.   

    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)  
    dim str as string  
        Winsock1.GetData str  
        If str = "Q" Then  
            Winsock1.Close  
            Winsock1.LocalPort = 19878  
            Winsock1.Listen  
        End If  
    End Sub  
    str 是接受到的字符串,这里进行处理
      

  6.   

    为什么第一次和服务器能正常连接,但是COMMAND2当断开后,再COMMAND1连接就不行了?请高手指点下
    客户端:
    Private Sub Command1_Click()
    Command1.Enabled = False
    Command2.Enabled = True
    If ipclient.Text = "" Then
        MsgBox "IP不能为空"
    Else
        Winsockclient.Connect ipclient.Text, 1001
    End If
    If Winsockclient.State = sckConnecting Then Label3.Caption = "正连接"
    If Winsockclient.State = sckClosed Then
    Label3.Caption = "失  败"
    Command1.Enabled = True
    Command2.Enabled = False
    End If
    End SubPrivate Sub Command2_Click()
    Dim x As String
        If Winsockclient.State = sckClosed Then
        MsgBox "未连接"
        ElseIf Winsockclient.State = sckConnected Then
        Label3.Caption = "已断开"
        Winsockclient.Close
        Command1.Enabled = True
        Command2.Enabled = False
        End If
    End SubPrivate Sub Form_Load()
    Winsockclient.RemotePort = 1001
    Label3.Caption = "未连接"
    Command1.Enabled = True
    Command2.Enabled = False
    End SubPrivate Sub textsend_Change()
    Winsockclient.SendData textsend.Text
    End SubPrivate Sub Winsockclient_Close()
    Winsockclient.Close
    MsgBox "与服务器断开连接"
    Command1.Enabled = True
    Command2.Enabled = False
    Label3.Caption = "已断开"
    End Sub
    Private Sub Winsockclient_Connect()
    Command1.Enabled = False
      Command2.Enabled = True
    End SubPrivate Sub Winsockclient_DataArrival(ByVal bytesTotal As Long)
    Dim str As String
    Winsockclient.GetData str
    If str = "ok" Then
    Label3.Caption = "已连接"
    End If
    Textget.Text = str
    End Sub