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

収集する前に生データを変換しようとしているため、これらを取得しています。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 に答える
1

上記のコードの Read() メソッドは、_stream.Read() がバッファーの一部しか満たしていない場合に、_readbuffer 全体をデコードしています。_bytecount は、デコードできるバイト数を示します。

StreamReaderの使用を提案できますか。StreamReader.ReadLine() メソッドは、改行が受信されるまでブロックされ、文字列が返されます。

于 2010-08-18T04:42:09.800 に答える