2012年12月11日 星期二

Telnet ... 簡單的寫法


    Private T_Stream As Net.Sockets.NetworkStream
    Private T_Client As New Net.Sockets.TcpClient()
    Private bytWriting As [Byte]()
    Private bytReading As Byte()

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        T_Client.SendTimeout = 1500
        T_Client.Connect("主機IP", "23")
        T_Stream = T_Client.GetStream
        System.Threading.Thread.Sleep(1500)  ' 暫停一下等主機回應
        TextBox1.Text = TextBox1.Text & ReadData() & vbCrLf     ' 取得回應的資料 

        WriteData("帳號指令等" & vbCrLf)      ' 輸入  ... 重複 WriteData ReadData 就跟用 Telnet 一樣   
        System.Threading.Thread.Sleep(500)
        TextBox1.Text = TextBox1.Text & ReadData() & vbCrLf

        T_Stream.Close()
        T_Client.Close()
    End Sub

    Private Function ReadData() As String
        Dim sData As String
        ReDim bytReading(T_Client.ReceiveBufferSize)
        T_Stream.Read(bytReading, 0, T_Client.ReceiveBufferSize)
        sData = Trim(System.Text.Encoding.Default.GetString(bytReading))
        ReadData = sData
    End Function

    Private Sub WriteData(ByVal sData As String)
        bytWriting = System.Text.Encoding.Default.GetBytes(sData)
        T_Stream.Write(bytWriting, 0, bytWriting.Length)
    End Sub

備註:如果回傳的資料過大,可能會漏掉部份內容,
         因為 ReceiveBufferSize 預設為 8192,
         可於 ReadData() 增加下列語法,加大 BufferSize
         T_Client..ReceiveBufferSize = xxxxxx