Konsolen-Code in Form-Code übertragen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von OhManIchAnfänger.

    Konsolen-Code in Form-Code übertragen

    Moin Community,

    ich habe hier ein Programm, dass ich vor einigen Jahren mal benutzt hatte.
    Ich habe den Code für Konsolen benutzt und nun möchte ich diesen Code gerne im Form nutzten...
    Aber leider hängt sich das Form auf.
    Wo liegt mein Fehler?
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ' Muss auf richtigen Port muss dieselbe wie Port-Client will auf verbinden. Zuhören
    2. Const portNumber As Integer = 8000
    3. Dim tcpListener As New TcpListener(portNumber)
    4. tcpListener.Start()
    5. log.Items.Add("Warten auf Verbindung ...")
    6. Try
    7. ' Akzeptieren Sie die angemeldete Client-Verbindung und zurück
    8. ' Ein TcpClient für die Kommunikation initialisiert.
    9. Dim tcpClient As TcpClient = tcpListener.AcceptTcpClient()
    10. log.Items.Add("Verbindung angenommen.")
    11. ' Holen Sie sich den Strom
    12. Dim networkStream As NetworkStream = tcpClient.GetStream()
    13. ' Lesen Sie den Stream in ein Byte-Array
    14. Dim bytes(tcpClient.ReceiveBufferSize) As Byte
    15. networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
    16. ' Bringen Sie die Daten vom Client auf der Konsole empfangen.
    17. Dim clientdata As String = Encoding.ASCII.GetString(bytes)
    18. log.Items.Add(("Client sendet: " + clientdata))
    19. Dim responseString As String = "Verbunden mit Server."
    20. Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(responseString)
    21. networkStream.Write(sendBytes, 0, sendBytes.Length)
    22. log.Items.Add(("Message gesendet /> : " + responseString))
    23. ' Jede Kommunikation mit dem Remote-Client über die TcpClient können Sie hier.
    24. ' Schließe TcpListener und TcpClient.
    25. tcpClient.Close()
    26. tcpListener.Stop()
    27. log.Items.Add("schließen")
    28. Catch e As Exception
    29. log.Items.Add(e.ToString())
    30. End Try


    und der Client

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim tcpClient As New System.Net.Sockets.TcpClient()
    2. tcpClient.Connect("192.168.56.1", 8000)
    3. Dim networkStream As NetworkStream = tcpClient.GetStream()
    4. If networkStream.CanWrite And networkStream.CanRead Then
    5. ' Führen Sie eine einfache schreiben.
    6. Dim a As String = Console.ReadLine()
    7. Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(a)
    8. networkStream.Write(sendBytes, 0, sendBytes.Length)
    9. ' Lesen Sie die NetworkStream in ein Byte-Puffer.
    10. Dim bytes(tcpClient.ReceiveBufferSize) As Byte
    11. networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
    12. ' Ausgabe der empfangenen Daten vom Host an die Konsole.
    13. Dim returndata As String = Encoding.ASCII.GetString(bytes)
    14. log.Items.Add(("Host zurückgegeben: " + returndata))
    15. Else
    16. If Not networkStream.CanRead Then
    17. log.Items.Add("Die Daten werden nicht in diesen Stream geschreiben")
    18. tcpClient.Close()
    19. Else
    20. If Not networkStream.CanWrite Then
    21. log.Items.Add("Keine Daten in diesem Stream")
    22. tcpClient.Close()
    23. End If
    24. End If
    25. End If
    26. ' Pause so Benutzer kann die Ausgabe der Konsole
    27. Main()
    das liegt daran, dass du es im GUI Thread ausführst...
    in der Konsole hast du keine GUI, deshalb hängt sich dort auch nichts auf....

    -> Multithreading verwenden...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Einmal einen neuen Thread für die Prozedure erstellen

    VB.NET-Quellcode

    1. Private ServerThread as new System.Threading.Thread(AddressOf DeineTolleSub)


    dann deienen Code in ne Sub Packen...

    VB.NET-Quellcode

    1. Sub DeineTolleSub
    2. dim portNumber As Integer = 8000
    3. Dim tcpListener As New TcpListener(portNumber)
    4. tcpListener.Start()
    5. log.Items.Add("Warten auf Verbindung ...")
    6. Try
    7. ' Akzeptieren Sie die angemeldete Client-Verbindung und zurück
    8. ' Ein TcpClient für die Kommunikation initialisiert.
    9. Dim tcpClient As TcpClient = tcpListener.AcceptTcpClient()
    10. log.Items.Add("Verbindung angenommen.")
    11. ' Holen Sie sich den Strom
    12. Dim networkStream As NetworkStream = tcpClient.GetStream()
    13. ' Lesen Sie den Stream in ein Byte-Array
    14. Dim bytes(tcpClient.ReceiveBufferSize) As Byte
    15. networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
    16. ' Bringen Sie die Daten vom Client auf der Konsole empfangen.
    17. Dim clientdata As String = Encoding.ASCII.GetString(bytes)
    18. log.Items.Add(("Client sendet: " + clientdata))
    19. Dim responseString As String = "Verbunden mit Server."
    20. Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(responseString)
    21. networkStream.Write(sendBytes, 0, sendBytes.Length)
    22. log.Items.Add(("Message gesendet /> : " + responseString))
    23. ' Jede Kommunikation mit dem Remote-Client über die TcpClient können Sie hier.
    24. ' Schließe TcpListener und TcpClient.
    25. tcpClient.Close()
    26. tcpListener.Stop()
    27. log.Items.Add("schließen")
    28. Catch e As Exception
    29. log.Items.Add(e.ToString())
    30. End Try
    31. End Sub


    anschliessend in nem Button Klick event oder dem Form Load event den Thread starten mit

    VB.NET-Quellcode

    1. ServerThread.start


    Sowas steht glaub auch in dem Thread
    Multiserver (TCP)