Hallo,
benutze VB2010. Windows XP bzw. 7 Rechner.
Ich muss von Windows auf Unix zugreifen, dort Verzeichnisse auslesen und
Dateien, die auf der UNIX-Maschine liegen ausführen lassen. (ohne Samba-Verbindung)
(Anstossen, auf Ergebnis warten sowie Rückgabewerte auffangen.)
Das heißt ich muss mich einloggen, in ein Verzeichnis wechseln, das Verzeichnis auslesen
d.h. durch ein Command ('ls') das Verzeichnis auslesen und ggf. ein bestimmtes Script
mittels 'sh ..' ausführen.
'ls' 'sh ..' sind Unix-Commandos
Dazu eignet sich am besten Telnet.
Jedoch habe ich massive Probleme mit Telnet.
Ich kann zwar den Rechner anpingen, oder auch wohl? Nachrichten senden,
aber wie kann ich auslesen was der Rechner zurückbringt.
Wenn ich stream.READ ausführe bleibt der Rechner hängen und wartet wohl - auf was?
Ich habe gelesen, dass man dazu Invoke verwenden soll bzw. den Code in einen extra Thread laufen lassen soll, aber ich habe keine Ahnung wie das funktioniert.
Anbei mein Code - bleibt beim Senden plötzlich hängen.
DANKE
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Public Class TCPClientConsole
Shared Sub Connect()
Try
Dim server As String = "xy"
Dim Nachricht As String = "login abc"
Dim port As Integer = 5001
Dim client As New TcpClient(server, port)
'Nachricht in ein Byte Array umwandeln
Dim NByte As [Byte]() = System.Text.Encoding.ASCII.GetBytes( _
Nachricht)
Dim stream As NetworkStream = client.GetStream()
' Nachricht auf den Server senden
stream.Write(NByte, 0, NByte.Length)
NByte = New [Byte](256) {}
Dim responseData As String = String.Empty
' Auslesen der Nachricht vom Server
Dim bytes As Integer = stream.Read(NByte, 0, NByte.Length)
'=> das Programm bleibt stehen und wartet => auf WAS? oder
' was muss ich tun?
'hier möchte ich die Nachricht des Servers auslesen und ggf. im LoginProzess
' eingreifen können-
responseData = System.Text.Encoding.ASCII.GetString(NByte, 0, bytes)
Console.WriteLine("Received: {0}", responseData)
'lesen und ggf. wieder senden und wieder lesen
'Alles Beenden
stream.Close()
client.Close()
Catch e As ArgumentNullException
Console.WriteLine("ArgumentNullException: {0}", e)
Catch e As SocketException
Console.WriteLine("SocketException: {0}", e)
End Try
End Sub
End Class |