VB.NET пишет клиент telnet с помощью system.net.tcpclient - PullRequest
1 голос
/ 18 августа 2010

Это не работает для меня, когда я подключаюсь к солярису

Сервер отправляет обратно

??%

кто-нибудь знает, что я делаю не так

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

Ответы [ 3 ]

1 голос
/ 18 августа 2010

%, который вы получаете от сервера, является частью согласования параметров Telnet. Вам нужно провести согласование опций, прежде чем начнется любое другое общение.

0 голосов
/ 20 февраля 2015

Вы получаете их, потому что вы пытаетесь перевести необработанные данные до их сбора.Вам нужно добавить около 2 секунд сна между связью между функциями telnet.

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()
0 голосов
/ 18 августа 2010

Метод Read () в приведенном выше коде декодирует весь _readbuffer, когда _stream.Read () может заполнить только часть буфера._bytecount сообщит вам, сколько байтов вы можете декодировать.

Могу ли я предложить использовать StreamReader .Метод StreamReader.ReadLine () блокируется до получения новой строки и возвращает вам строку.

...