Hallo,
danke für Deinen Hinweis auf den Zeilenumbruch. Anschließend funktioniert zwar das Senden aber
wohin? Entweder in der Routine 'Nachricht_lesen' bei der vorletzten Zeile bleibt das Programm hängen und/oder die Antwort besteht aus: '??!??&'
Der Port ist zum Senden die 23 -
kann es jedoch sein, dass beim Antworten ein anderer Port verwendet wird? -
Und wohin oder wie sollte ich BeginInvoke() setzen?
Programm sowie den Sende- und Empfangsteil in ein eigenes Thread verlagert.
Anbei mein Code: (Bitte um Verbesserungen oder Vorschläge wie ich die Telnet-Verbindung hinbekomme oder was daran noch falsch ist. Danke)
Klassencode:
Imports System.IO
Imports System.Net.Sockets
Imports System.Threading Class clsTelnet
Dim TServer As String = "xy"
Dim TNachricht As String
Dim Port As Integer = 23
Dim client As TcpClient
Dim DatenStream As NetworkStream
'Byte-Array zum Senden von Nachrichten
Dim NByte(256) As Byte
'Variable zum Erhalten von Nachrichten
Dim responseData As [String] = String.Empty
Dim bytes As Integer
Dim Buffer(1024) As Byte
Dim SZ As Integer
Dim TConn As Thread
Dim TSenden As Thread
Dim TLesen As Thread
'Aufruf der Routine aus dem Formular
Public Sub Telnet_Connect()
TConn = New Thread(AddressOf Tel_Connect) 'Thread Aufruf für Telnet
TConn.IsBackground = True
TConn.Start()
End Sub
Private Sub Tel_Connect()
Dim Verbund As Boolean
Do While Verbund = False
'Verbindung aufnehmen und in einer eigenen Variable speichern
client = New TcpClient(TServer, Port)
client.NoDelay = False
client.ReceiveBufferSize = 1024
client.SendBufferSize = 256
Verbund = client.Connected
Loop
'Erstellen eines Streamobjektes zum Lesen und zum Schreiben
DatenStream = client.GetStream()
TSenden = New Thread(AddressOf Nachricht_senden)
TSenden.IsBackground = True
TSenden.Start()
TLesen = New Thread(AddressOf Nachricht_senden)
TLesen.IsBackground = True
TLesen.Start()
'telnet://<user>:<password>@<host>:<port>/
'aber egal was ich hier Eintrage=> Reaktion im Lesen immer gleich: ??!??`
TNachricht = "telnet://user:pass@xy:23/ " & vbCrLf
Nachricht_senden()
Nachricht_lesen()
'stream.Close(): 'client.Close()
End Sub
'login im Telnet/Senden von Nachrichten
Private Sub Nachricht_senden()
'Nachricht wird in Byte-Array umgewandelt
NByte = System.Text.Encoding.ASCII.GetBytes(TNachricht)
'Senden der Nachricht an den Server (Byte-Array)
DatenStream.Write(NByte, 0, NByte.Length)
'DatenStream.Flush()
Console.WriteLine("Sent: {0}", TNachricht)
End Sub
'Empfangen von Telnet-Nachrichten
Private Sub Nachricht_lesen()
responseData = String.Empty
bytes = DatenStream.Read(NByte, 0, NByte.Length)
'Umwandeln des Datenstrombytes in einen String
responseData = System.Text.Encoding.ASCII.GetString(NByte, 0, bytes)
'Lesen der Nachrichten aus dem Datenstrom
DatenStream.Read(Buffer, 0, Buffer.Length)
'hier bleibt das Programm nun hängen und im Buffer steht: ??!??'
responseData = System.Text.Encoding.ASCII.GetString(Buffer, 0, _
Buffer.Length)
Console.WriteLine("Received: {0}", responseData)
End Sub
End Class'Aufruf der Telnet Klasse im Formular
Dim cTelnet As clsTelnet
Private Sub frmTelnet_Load(sender As System.Object, e As System.EventArgs) _
Handles MyBase.Load
cTelnet = New clsTelnet
cTelnet.Telnet_Connect()
End Sub Danke für die Hilfe |