2

当我连接到我的 solaris 盒子时,这对我不起作用

服务器正在发回

??%

有谁知道我做错了什么

Imports System.Net
    Imports System.Net.Sockets
    Imports System.Text

    Public Class TelnetClient

        Private _hostname As String = "myserver"
        Private _username As String = "user"
        Private _password As String = "pass"

        Private _port As Integer = 23
        Private _client As TcpClient
        Private _data As String

        Private _sendbuffer(128) As Byte
        Private _readbuffer(128) As Byte
        Private _bytecount As Integer

        Private _stream As NetworkStream

        Private Sub Send(ByVal Text As String)
            _sendbuffer = Encoding.ASCII.GetBytes(Text)
            _stream.Write(_sendbuffer, 0, _sendbuffer.Length)
        End Sub

        Private Sub Read()
            _bytecount = _stream.Read(_readbuffer, 0, _readbuffer.Length)
            _data = Encoding.ASCII.GetString(_readbuffer)
        End Sub

        Public Sub Connect()

            _client = New TcpClient(_hostname, _port)

            _stream = _client.GetStream

            Send(_username)
            Read()

            MsgBox(_data)

            Send(_password)
            Read()

            _stream.Close()

            _client.Close()





        End Sub

    End Class
4

3 回答 3

2

您从服务器获得的 ??% 是 Telnet 选项协商的一部分。在进行任何其他通信之前,您需要进行选项协商。

于 2010-08-18T12:07:41.037 回答
1

上面代码中的 Read() 方法正在解码整个 _readbuffer,而 _stream.Read() 可能只填充部分缓冲区。_bytecount 将告诉您可以解码多少字节。

我可以建议使用StreamReader吗?StreamReader.ReadLine() 方法将阻塞,直到收到换行符并返回一个字符串。

于 2010-08-18T04:42:09.800 回答
1

你得到这些是因为你试图在收集原始数据之前翻译它。您需要在 telnet 函数之间的通信之间添加大约 2 秒的睡眠时间。

Public Sub Connect()

        _client = New TcpClient(_hostname, _port)

        _stream = _client.GetStream

        Threading.Thread.Sleep(2000)

        Send(_username)
        Threading.Thread.Sleep(2000)
        Read()

        MsgBox(_data)

        Send(_password)
        Threading.Thread.Sleep(2000)
        Read()

        _stream.Close()

        _client.Close()
于 2015-02-20T19:09:23.953 回答