TCP Networkstream aufrecht erhalten & Daten senden

  • VB.NET

    TCP Networkstream aufrecht erhalten & Daten senden

    Hallo Liebe VB Gemeinde,

    Vorweg gesagt, habe ich vor einigen Jahren aus Interesse mit VB 5 & 6 gearbeitet und am Anfang des Jahres die Installations CD's zufällig im Sortiment wiederentdeckt. Da ich aktuell Windows 7 als 64-Bit System nutze, hat sich die weitere Nutzung von o.g. VBVersionen von alleine erledigt, wobei ich mit denen noch auf einer virtuellen Windows XP mittels Virtualbox arbeiten kann. Nun habe ich nach einiger Wartezeit endlich in den letzten Tagen meine VB 2012 Version erhalten und wollte mal so entdecken, was es da so neues gibt in VB und wo die gravierenden Unterschiede sind und wollte daher mal parallel mit dem alten und den neuen VB Programmen einen Telnet Clienten schreiben.

    Bei VB 6 geht das ja recht einfach mit der Winsock Libary, wobei das stutzen bei VB 2012 groß war, dass Winsock heut zu Tage ja nicht mehr genutzt wird und musste mich daher in TCP Verbindungen lesen und üben. Soweit ist schon alles gut und die TCP Verbindung besteht und ich komme bis zum Telnet Login. Ab da fingen schon meine Probleme an, Die Login-daten zu senden, den ich sehe nicht was gesendet wurde und was der Telnet Server geantwortet hat.

    Sicherlich könnte ich mir nun hier aus dem Forum oder woanders schon den kompletten Source für einen TCP Clienten herunterladen und auf meine Bedürfnisse anpassen, jedoch hilft es mir aber wenig weiter beim selbstständigen erstellen des Programmes, wo für mich der Ehrgeiz und Reiz als Hobby Programmierer liegt. Jedoch komme ich da auch an einem Punkt, wo ich den Zeigefinger heben muss für einige Rückfragen, da die VB 2012 Version ja noch "relativ" neu ist und es noch nicht soviele Codebeispiele gibt an denen man sich eventuell orientieren könnte und daher die Try & Error Methode mich da schon schneller weiter gebracht hat als stundenlanges googlen.

    Hier ist bereits der von mir eigenständig erstellte Source in VB 2012 mit Unprofessionellem VB 6 Wissen angefertigt und wäre da nun über Denkanstösse erfreut zu folgenden Fragen:
    • Wie sende ich nun basierend auf meinem eigenen Source den Login zum Telnet, wobei ich mir sicher bin dass ich den schon sende.
    • Wie erhalte ich trotzdem einen permanenten Netzwerkstream mit dem vom Server gesendeten Daten?
    • Wie erhalte ich den TCP Netzwerkstream permanent zum Server aufrecht, ohne das der mich nach einer gewissen Zeit trennt?

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.IO
    3. Imports System.Net
    4. Imports System.Net.Sockets
    5. Imports System.Text
    6. Public Class Form1
    7. Dim Socket As System.Net.Sockets.Socket
    8. Dim StreamIn As System.IO.TextReader
    9. Dim StreamOut As System.IO.TextWriter
    10. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    11. Cluster_Monitor.Text = Cluster_Monitor.Text & "> Programm bereit ..." & vbCrLf
    12. Connect.Enabled = True
    13. Disconnect.Enabled = False
    14. End Sub
    15. Private Sub Connect_Click(sender As Object, e As EventArgs) Handles Connect.Click
    16. Dim ServerAddress As String = RemoteHost.Text
    17. Dim ServerPort As Integer = RemotePort.Text
    18. Dim ipHostInfo As System.Net.IPHostEntry = System.Net.Dns.GetHostEntry(ServerAddress)
    19. Dim EP As New System.Net.IPEndPoint(ipHostInfo.AddressList(0), ServerPort)
    20. Socket = New System.Net.Sockets.Socket(EP.Address.AddressFamily, Net.Sockets.SocketType.Stream, Net.Sockets.ProtocolType.Tcp)
    21. Socket.Connect(ServerAddress, ServerPort)
    22. Cluster_Monitor.AppendText("> Initialisiere Verbindung zu " & Socket.RemoteEndPoint.ToString() & vbCrLf)
    23. Dim tcpClient As New System.Net.Sockets.TcpClient()
    24. tcpClient.Connect(ServerAddress, ServerPort)
    25. Dim networkStream As NetworkStream = tcpClient.GetStream()
    26. 'prüfen ob lesen/schreiben möglich ist
    27. If networkStream.CanRead And networkStream.CanWrite Then
    28. Dim myReceive(tcpClient.ReceiveBufferSize) As Byte
    29. networkStream.Read(myReceive, 0,
    30. CInt(tcpClient.ReceiveBufferSize))
    31. Dim myReturnData As String =
    32. Encoding.ASCII.GetString(myReceive)
    33. Cluster_Monitor.AppendText(myReturnData & vbCrLf)
    34. End If
    35. 'Ab hier sehe ich nur die Login Aufforderung und kann im Monitorfenster nichts mehr anderes sehen
    36. Dim sendRemoteUser As [Byte]()
    37. sendRemoteUser = Encoding.ASCII.GetBytes(RemoteUser.Text & vbCrLf)
    38. networkStream.Write(sendRemoteUser, 0, sendRemoteUser.Length)
    39. Cluster_Monitor.AppendText(myReturnData & vbCrLf)
    40. Connect.Enabled = False
    41. Disconnect.Enabled = True
    42. End Sub
    43. Private Sub Disconnect_Click(sender As Object, e As EventArgs) Handles Disconnect.Click
    44. Cluster_Monitor.Text = Cluster_Monitor.Text & vbCrLf & "> Verbindung beendet ..."
    45. Connect.Enabled = True
    46. Disconnect.Enabled = False
    47. End Sub
    48. Private Sub Cluster_Monitor_TextChanged(sender As Object, e As EventArgs) Handles Cluster_Monitor.TextChanged
    49. If Cluster_Monitor.Text.Length > 0 Then
    50. Cluster_Monitor.Focus()
    51. Cluster_Monitor.Select(Cluster_Monitor.Text.Length, 0)
    52. End If
    53. End Sub
    54. End Class


    In VB 6 mittels Winsock funktioniert indess ales tadellos ... ?(