⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 telnet.frm

📁 一个完整的Telnet程序
💻 FRM
📖 第 1 页 / 共 2 页
字号:
        Receiving = True
        term_CaretControl True
    Else
        Exit Sub
    End If
    
    If (bytesTotal > 0) Then  ' If there is any data...
        
        
        WinsockClient.GetData CH, vbByte + vbArray, bytesTotal
        
       ' CH = Buf
        For I = 0 To bytesTotal - 1
            Select Case cmd
                Case GO_NORM
                  cmd = term_process_char(CH(I))
                Case GO_IAC1
                  cmd = iac1(CH(I))
                Case GO_IAC2
                  cmd = iac2(CH(I))
                Case GO_IAC3
                  cmd = iac3(CH(I))
                Case GO_IAC4
                  cmd = iac4(CH(I))
                Case GO_IAC5
                  cmd = iac5(CH(I))
                Case GO_IAC6
                  cmd = iac6(CH(I))
                Case Else
                 If TraceTelnet Then Debug.Print "Invalid 'next (" + Str$(cmd) + ")' processing routine in cmd loop"
            End Select
        Next I
    End If
    
    term_CaretControl False
    Receiving = False
End Sub



Private Function iac1(CH As Byte) As Integer

  ' Debug.Print "IAC : ";
  iac1 = GO_NORM

  Select Case CH
    Case DOTEL
      iac1 = GO_IAC2
    Case DONTTEL
      iac1 = GO_IAC6
    Case WILLTEL
      iac1 = GO_IAC3
    Case WONTTEL
      iac1 = GO_IAC4
    Case SB
      iac1 = GO_IAC5
      ppno = 0
    Case SE
      ' End of negotiation string, string is in parsedata()
      Select Case parsedata(0)
        Case TERMTYPE
          If parsedata(1) = 1 Then
               If TraceTelnet Then Debug.Print "SENT: SB TERMTYPE VT100"
                WinsockClient.SendData Chr$(IAC) & Chr$(SB) & Chr$(TERMTYPE) & "DEC-VT100" & Chr$(0) & Chr$(IAC) & Chr$(SE)
          End If
        Case TERMSPEED
          If parsedata(1) = 1 Then
                ' Debug.Print "TERMSPEED"
                If TraceTelnet Then Debug.Print "SENT: SB TERMSPEED 38400"
                WinsockClient.SendData Chr$(IAC) & Chr$(WILLTEL) & Chr$(CH)
                WinsockClient.SendData Chr$(IAC) & Chr$(SB) _
                                & Chr$(TERMSPEED) & Chr$(0) _
                                & "57600,57600" _
                                & Chr$(IAC) & Chr$(SE)
          End If
      End Select
  End Select

End Function

Private Function iac2(CH As Byte) As Integer

  'DO Processing Respond with WILL or WONT

  If TraceTelnet Then Debug.Print "                                                                   RECEIVED DO : ";
  iac2 = GO_NORM

  Select Case CH
    Case BINARY
        If TraceTelnet Then Debug.Print "BINARY"
        WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(BINARY)
        If TraceTelnet Then Debug.Print "SENT: WONT BINARY"
    Case ECHO
        If TraceTelnet Then Debug.Print "ECHO"
        WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(ECHO)
        If TraceTelnet Then Debug.Print "SENT: WONT ECHO"
    Case NAWS
        If TraceTelnet Then Debug.Print "WINDOW SIZE"
        WinsockClient.SendData Chr$(IAC) & Chr$(SB) & Chr$(NAWS) & Chr$(0) & Chr$(80) & Chr$(0) & Chr$(24) & Chr$(IAC) & Chr$(SE)
        If TraceTelnet Then Debug.Print "SENT: SB WINDOW SIZE 80x24"
    Case SGA
        If TraceTelnet Then Debug.Print "SGA"
        If Not sw_igoahead Then
            If TraceTelnet Then Debug.Print "SENT: WILL SGA"
            WinsockClient.SendData Chr$(IAC) & Chr$(WILLTEL) & Chr$(SGA)
            sw_igoahead = True
        Else
           If TraceTelnet Then Debug.Print "DID NOT RESPOND"
        End If
    Case TERMTYPE
        If TraceTelnet Then Debug.Print "TERMTYPE"
        If Not sw_termsent Then
            If TraceTelnet Then Debug.Print "SENT: WILL TERMTYPE"
              sw_termsent = True
              WinsockClient.SendData Chr$(IAC) & Chr$(WILLTEL) & Chr$(TERMTYPE)
            If TraceTelnet Then Debug.Print "SENT: SB TERMTYPE VT100"
              WinsockClient.SendData Chr$(IAC) & Chr$(SB) & Chr$(TERMTYPE) & _
              Chr$(0) & "VT100" & Chr$(IAC) & Chr$(SE)
         Else
            If TraceTelnet Then Debug.Print "DID NOT RESPOND"
         End If
 
    Case TERMSPEED
        If TraceTelnet Then Debug.Print "TERMSPEED"
        If TraceTelnet Then Debug.Print "SENT: WILL TERMSPEED"
        WinsockClient.SendData Chr$(IAC) & Chr$(WILLTEL) & Chr$(TERMSPEED)
      
    If TraceTelnet Then Debug.Print "SENT: SB TERMSPEED 57600"
        WinsockClient.SendData Chr$(IAC) & Chr$(SB) & Chr$(TERMSPEED) & Chr$(0)
        WinsockClient.SendData "57600,57600"
        WinsockClient.SendData Chr$(IAC) & Chr$(SE)
      
    Case TFLOWCNTRL
        If TraceTelnet Then Debug.Print "TFLOWCNTRL"
        If TraceTelnet Then Debug.Print "SENT: WONT FLOWCONTROL"
        WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(CH)
      
    Case LINEMODE
        If TraceTelnet Then Debug.Print "LINEMODE"
        If TraceTelnet Then Debug.Print "SENT: WONT LINEMODE"
        WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(CH)
      
    Case STATUS
        If TraceTelnet Then Debug.Print "STATUS"
        If TraceTelnet Then Debug.Print "SENT: WONT STATUS"
        WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(CH)
      
    Case TIMING
        If TraceTelnet Then Debug.Print "TIMING"
        If TraceTelnet Then Debug.Print "SENT: WONT TIMING"
        WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(CH)
      
    Case DISPLOC
        If TraceTelnet Then Debug.Print "DISPLOC"
        If TraceTelnet Then Debug.Print "SENT: WONT DISPLOC"
        WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(CH)
    
    Case ENVIRON
        If TraceTelnet Then Debug.Print "ENVIRON"
        If TraceTelnet Then Debug.Print "SENT: WONT ENVIRON"
        WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(CH)
    
    Case UNKNOWN39
        If TraceTelnet Then Debug.Print "UNKNOWN39"
        If TraceTelnet Then Debug.Print "SENT: WONT " & Asc(CH)
        WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(CH)
    
    Case AUTHENTICATION
        If TraceTelnet Then Debug.Print "AUTHENTICATION"
        If TraceTelnet Then Debug.Print "SENT: WILL "; AUTHENTICATION; ""
        WinsockClient.SendData Chr$(IAC) & Chr$(WILLTEL) & Chr$(CH)
      
        If TraceTelnet Then Debug.Print "SENT: SB AUTHENTICATION"
        WinsockClient.SendData Chr$(IAC) & _
                          Chr$(SB) & _
                          Chr$(AUTHENTICATION) & _
                          Chr$(0) & Chr$(0) & Chr$(0) & Chr$(0) & _
                          Chr$(IAC) & _
                          Chr$(SE)
    Case Else
        If TraceTelnet Then Debug.Print "UNKNOWN CMD " & Asc(CH)
        If TraceTelnet Then Debug.Print "SENT: WONT UNKNOWN CMD " & CH
        WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(CH)
  End Select

End Function

Private Function iac3(CH As Byte) As Integer

  ' WILL Processing - Respond with DO or DONT
  
If TraceTelnet Then Debug.Print "                                                                   RECEIVED WILL : ";

  iac3 = GO_NORM

  Select Case CH
    Case ECHO
    If TraceTelnet Then Debug.Print "ECHO"
      If Not sw_echo Then
        sw_echo = True
        WinsockClient.SendData Chr$(IAC) & Chr$(DOTEL) & Chr$(ECHO)
      If TraceTelnet Then Debug.Print "SENT: DO ECHO"
      End If
    Case SGA
    If TraceTelnet Then Debug.Print "SGA"
      If Not sw_ugoahead Then
        sw_ugoahead = True
        WinsockClient.SendData Chr$(IAC) & Chr$(DOTEL) & Chr$(SGA)
      If TraceTelnet Then Debug.Print "SENT: DOTEL SGA"
      End If
    
    Case TERMSPEED
    If TraceTelnet Then Debug.Print "TERMSPEED"
    If TraceTelnet Then Debug.Print "SENT: DONT TERMSPEED"
      WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(CH)
      
    Case TFLOWCNTRL
    If TraceTelnet Then Debug.Print "TFLOWCNTRL"
    If TraceTelnet Then Debug.Print "SENT: DONT FLOWCONTROL"
      WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(CH)
      
    Case LINEMODE
    If TraceTelnet Then Debug.Print "LINEMODE"
    If TraceTelnet Then Debug.Print "SENT: DONT LINEMODE"
      WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(CH)
      
    Case STATUS
    If TraceTelnet Then Debug.Print "STATUS"
    If TraceTelnet Then Debug.Print "SENT: DONT STATUS"
      WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(CH)
      
    Case TIMING
    If TraceTelnet Then Debug.Print "TIMING"
    If TraceTelnet Then Debug.Print "SENT: DONT TIMING"
      WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(CH)
      
    Case DISPLOC
    If TraceTelnet Then Debug.Print "DISPLOC"
    If TraceTelnet Then Debug.Print "SENT: WONT DISPLOC"
      WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(CH)
    
    Case ENVIRON
    If TraceTelnet Then Debug.Print "ENVIRON"
    If TraceTelnet Then Debug.Print "SENT: WONT ENVIRON"
      WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(CH)
    
    Case UNKNOWN39
    If TraceTelnet Then Debug.Print "UNKNOWN39"
    If TraceTelnet Then Debug.Print "SENT: WONT " & Asc(CH)
      WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(CH)
    
    
    Case Else
    If TraceTelnet Then Debug.Print "UNKNOWN CMD " & Asc(CH)
    If TraceTelnet Then Debug.Print "SENT: WONT UNKNOWN CMD " & Asc(CH)
      WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(CH)
  End Select

End Function

Private Function iac4(CH As Byte) As Integer

  ' WONT Processing
  
    If TraceTelnet Then Debug.Print "                                                                   RECEIVED WONT : ";

  iac4 = GO_NORM

  Select Case CH
    
    Case ECHO
    If TraceTelnet Then Debug.Print "ECHO"
      If sw_echo = True Then
        WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(ECHO)
      If TraceTelnet Then Debug.Print "SENT: DONTEL ECHO"
        sw_echo = False
      End If
      
    Case SGA
    If TraceTelnet Then Debug.Print "SGA"
    If TraceTelnet Then Debug.Print "SENT: DONT SGA"
      WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(SGA)
      sw_igoahead = False
    
    Case TERMSPEED
    If TraceTelnet Then Debug.Print "TERMSPEED"
    If TraceTelnet Then Debug.Print "SENT: DONT TERMSPEED"
      WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(CH)
    
    Case TFLOWCNTRL
    If TraceTelnet Then Debug.Print "FLOWCONTROL"
    If TraceTelnet Then Debug.Print "SENT: DONT FLOWCONTROL"
      WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(CH)
      
    Case LINEMODE
    If TraceTelnet Then Debug.Print "LINEMODE"
    If TraceTelnet Then Debug.Print "SENT: DONT LINEMODE"
      WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(CH)
      
    Case STATUS
    If TraceTelnet Then Debug.Print "STATUS"
    If TraceTelnet Then Debug.Print "SENT: DONT STATUS"
      WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(CH)
      
    Case TIMING
    If TraceTelnet Then Debug.Print "TIMING"
    If TraceTelnet Then Debug.Print "SENT: DONT TIMING"
      WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(CH)
      
    Case DISPLOC
    If TraceTelnet Then Debug.Print "DISPLOC"
    If TraceTelnet Then Debug.Print "SENT: DONT DISPLOC"
      WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(CH)
    
    Case ENVIRON
    If TraceTelnet Then Debug.Print "ENVIRON"
    If TraceTelnet Then Debug.Print "SENT: DONT ENVIRON"
      WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(CH)
    
    Case UNKNOWN39
    If TraceTelnet Then Debug.Print "UNKNOWN39"
    If TraceTelnet Then Debug.Print "SENT: DONT " & Asc(CH)
      WinsockClient.SendData Chr$(IAC) & Chr$(DONTTEL) & Chr$(CH)
    
    Case Else
    If TraceTelnet Then Debug.Print "UNKNOWN CMD " & Asc(CH)
    If TraceTelnet Then Debug.Print "SENT: DONT UNKNOWN CMD " & Asc(CH)
      WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(CH)
  End Select

End Function

Private Function iac5(CH As Byte) As Integer

Dim ich As Integer
  ' Collect parms after SB and until another IAC

  
    ich = CH
    If ich = IAC Then
      iac5 = GO_IAC1
      Exit Function
    End If
    
    If TraceTelnet Then Debug.Print "                                                                   RECEIVED : ";
    If TraceTelnet Then Debug.Print "SB("; ppno; ") = " & ich
    
    parsedata(ppno) = ich
    ppno = ppno + 1
    
    iac5 = GO_IAC5

End Function


Private Function iac6(CH As Byte) As Integer

  'DONT Processing

 
  iac6 = GO_NORM
        

  Select Case CH
    Case SE
      If TraceTelnet Then Debug.Print "                                                                   RECEIVED SE"
      If TraceTelnet Then Debug.Print "SENT: SE_ACK " & CH

    Case ECHO
      If TraceTelnet Then Debug.Print "                                                                   RECEIVED DONT : ";
      If TraceTelnet Then Debug.Print "ECHO"
      If Not sw_echo Then
        sw_echo = True
        WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(ECHO)
        If TraceTelnet Then Debug.Print "SENT: WONT ECHO"
      End If
    Case SGA
      If TraceTelnet Then Debug.Print "                                                                   RECEIVED DONT : ";
      If TraceTelnet Then Debug.Print "SGA"
      If Not sw_ugoahead Then
        sw_ugoahead = True
        WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(SGA)
        If TraceTelnet Then Debug.Print "SENT: WONT SGA"
      End If
    
    Case TERMSPEED
      If TraceTelnet Then Debug.Print "                                                                   RECEIVED DONT : ";
      If TraceTelnet Then Debug.Print "TERMSPEED"
      If TraceTelnet Then Debug.Print "SENT: WONT TERMSPEED"
      WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(CH)
      
    Case TFLOWCNTRL
      If TraceTelnet Then Debug.Print "                                                                   RECEIVED DONT : ";
      If TraceTelnet Then Debug.Print "TFLOWCNTRL"
      If TraceTelnet Then Debug.Print "SENT: WONT FLOWCONTROL"
      WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(CH)
      
    Case LINEMODE
      If TraceTelnet Then Debug.Print "                                                                   RECEIVED DONT : ";
      If TraceTelnet Then Debug.Print "LINEMODE"
      If TraceTelnet Then Debug.Print "SENT: WONT LINEMODE"
      WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(CH)
      
    Case STATUS
      If TraceTelnet Then Debug.Print "                                                                   RECEIVED DONT : ";
      If TraceTelnet Then Debug.Print "STATUS"
      If TraceTelnet Then Debug.Print "SENT: WONT STATUS"
      WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(CH)
      
    Case TIMING
      If TraceTelnet Then Debug.Print "                                                                   RECEIVED DONT : ";
      If TraceTelnet Then Debug.Print "TIMING"
      If TraceTelnet Then Debug.Print "SENT: WONT TIMING"
      WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(CH)
      
    Case DISPLOC
      If TraceTelnet Then Debug.Print "                                                                   RECEIVED DONT : ";
      If TraceTelnet Then Debug.Print "DISPLOC"
      If TraceTelnet Then Debug.Print "SENT: WONT DISPLOC"
      WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(CH)
    
    Case ENVIRON
      If TraceTelnet Then Debug.Print "                                                                   RECEIVED DONT : ";
      If TraceTelnet Then Debug.Print "ENVIRON"
      If TraceTelnet Then Debug.Print "SENT: WONT ENVIRON"
      WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(CH)
    
    Case UNKNOWN39
      If TraceTelnet Then Debug.Print "                                                                   RECEIVED DONT : ";
      If TraceTelnet Then Debug.Print "UNKNOWN39"
      If TraceTelnet Then Debug.Print "SENT: WONT " & Asc(CH)
      WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(CH)
        
    Case Else
      If TraceTelnet Then Debug.Print "                                                                   RECEIVED DONT : ";
      If TraceTelnet Then Debug.Print "UNKNOWN CMD " & Asc(CH)
      If TraceTelnet Then Debug.Print "SENT: WONT UNKNOWN CMD " & Asc(CH)
      WinsockClient.SendData Chr$(IAC) & Chr$(WONTTEL) & Chr$(CH)
  End Select

End Function


Private Sub WinsockClient_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
        
    frmTelnet.stbStatusBar.Panels(4).Text = Number & " - " & Description
    Operating = False
    Connected = False
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -