Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET使用system.NET.tcpclient编写telnet客户端_.net_Vb.net_Telnet_Tcpclient - Fatal编程技术网

VB.NET使用system.NET.tcpclient编写telnet客户端

VB.NET使用system.NET.tcpclient编写telnet客户端,.net,vb.net,telnet,tcpclient,.net,Vb.net,Telnet,Tcpclient,当我连接到solaris设备时,这对我不起作用 服务器正在发送回 ??% 有人知道我做错了什么吗 Imports System.Net Imports System.Net.Sockets Imports System.Text Public Class TelnetClient Private _hostname As String = "myserver" Private _username As String = "user"

当我连接到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
上面代码中的Read()方法是在_stream.Read()只能填充缓冲区的一部分时解码整个_readbuffer_字节数将告诉您可以解码多少字节


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

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

您获得这些选项是因为您试图在收集原始数据之前翻译原始数据。您需要在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()

不确定这是否是问题所在,因为我尝试使用轮询并读取计时器上可用的内容,但这会从服务器上给出相同的响应。有什么协议我遗漏了吗?PeanutPower,查看到定义Telnet协议的RFC的链接。