Hallo,
ich benutze das Objekt TelnetExpect- um mich auf eine Unix-Maschine einzuloggen und dort
Befehle auszuführen oder Verzeichnisse abzufragen.
Die Telnet-Klasse besitzt einen Expector um Daten zu lesen und zu schreiben.
(Beschreibung der Expector-Class:
Public Class Expector
Inherits System.Object
Member von TelnetExpect
Zusammenfassung:
Provides UNIX Expect-like scripting of terminal connections.
) Problem ist, das der Expector die Auswertung des DatenStreams übernimmt.
Ich definiere zwar ein Buffer-Byte-Array - aber wie kann ich den DatenStream ggf. in einer Schleife
auslesen, wenn das Byte-Array zu klein ist,
und 2. nachdem ich das DatenStream-Objekt auslese kann ich das Expect-Object nicht mehr benutzen, um abzufragen ob der Empfangsstring vorliegt sondern müsste dies selbt übernehmen.
Anbei der Code:
im Formular:
Public Class frmTelnet
Dim cTelnet As TelnetVerbindung.clstelnetsteuerklasse 'Klasse, die die
' Telnet-Verbindung regelt
'im Load des Formulars
Private Sub frmTelnet_Load(sender As System.Object, e As System.EventArgs) _
Handles MyBase.Load
cTelnet = New TelnetVerbindung.clstelnetsteuerklasse("xy", "user", _
"passwort")
End Sub
'Beim Button-Klick Auslösen der Telnet-Verbindung
Private Sub cmdTelnet_Click(sender As System.Object, e As System.EventArgs) _
Handles ....
cTelnet.Run()
End Sub
end Class
Klasse: clstelnetsteuerklasse
'Import und Implementiert die Klasse Diagnostics =>
'Ermöglicht den Zugriff auf lokale Prozesse und Remoteprozesse
'sowie das Starten und Anhalten lokaler Systemprozesse.
Imports System.Diagnostics
'Importiert und Implementiert die String-Klasse
Imports System.Text
'Importiert und Implementiert die Stream-Reader-Writer Klasse
Imports System.IO
'Importiert und Implementiert NetzwerkKlasse
Imports System.Net.Sockets
'Importiert und implementiert die TelnetExpect-Klasse
'Public Class Expector
'Inherits System.Object => Member von TelnetExpect
'Zusammenfassung:
' Provides UNIX Expect-like scripting of terminal connections.
Imports TelnetExpect
Public Class clstelnetsteuerklasse
Dim fexExpector As Expector
Public Sub Run()
Dim Telnet As TelnetStream = Connect()
'Angabe bezüglich der Rückmeldungen => Echo,TRUE => Ein-und
' Ausgabe-Mitteilungen
Telnet.SetRemoteMode(TelnetOption.Echo, True)
'Stellt eine Internet oder UNIX-Domain-Verbindung her - Bietet
' Unix-Scriptsprache
fexExpector = New Expector(Telnet)
'Abfrage, ob im Sendestring das Wort 'login:' vorkommt
fexExpector.Expect("login:")
'Absenden LoginName
fexExpector.SendLine(fsUserName)
'Abfrage ob im Rücksende-String Wort 'Password' vorkommt
fexExpector.Expect("Password")
'Absenden des zugehörigen Passwortes
fexExpector.SendLine(fsPasswort)
Dim str As Stream = Nothing
Dim Buffer(4048) As Byte'Setze einfach mal sehr großen Buffer ein, aber
' wenn dieser nicht ausreicht?
Telnet.Read(Buffer, 0, Buffer.Length)
Dim Anzeige As String = System.Text.Encoding.ASCII.GetString(Buffer)
'Nun habe ich String-Element (so wie ich wollte) - ABER!!!!
''Abfragen ob im RücksendeString folgender String vorkommt: _
'<Hostname><Username>'
'jedoch funktiert jetzt das Expect-Objekt nicht mehr und ich muss mich selbst
' darum kümmern!!!
'fexExpector.Expect(fsHostName & fsUserName)
fexExpector.SendLine("dir")
Telnet.Read(Buffer, 0, Buffer.Length)
Anzeige = System.Text.Encoding.ASCII.GetString(Buffer)
'fexExpector.Expect(fsHostName & fsUserName )
fexExpector.SendLine("ll tueirgendwas...")
Telnet.Read(Buffer, 0, Buffer.Length)
Anzeige = System.Text.Encoding.ASCII.GetString(Buffer)
'fexExpector.Expect(fsHostName & ": " & fsUserName & ":")
End Sub
'Aufbau der Verbindung durch Telnet-Connect
Private Function Connect() As TelnetStream
Dim client As New TcpClient(fsHostName, TelnetStream.DefaultPort)
Dim networkStream As Stream = client.GetStream
Dim Telnet As New TelnetStream(networkStream)
Return Telnet
End Function
end class Zusammenfassend:
Wie kann ich das Stream-Objekt in einen String auslesen mittels einer While-Schleife
und gleichzeitig das Expect-Objekt nutzen?
Danke |