VB.NET使用system.NET.tcpclient编写telnet客户端
当我连接到solaris设备时,这对我不起作用 服务器正在发送回 ??% 有人知道我做错了什么吗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"
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的链接。