0 Pluspunkte 0 Minuspunkte

Ich habe ein Script das einen TCP Listener startet und auf eine Textnachricht wartet. 

$listener = [System.Net.Sockets.TcpListener]::Create(12345)  # Hier 12345 durch den gewünschten Port ersetzen
$listener.Start()

Write-Host "TCP Listener gestartet. Warte auf Verbindung..."

$client = $listener.AcceptTcpClient()
$stream = $client.GetStream()
$reader = [System.IO.StreamReader]::new($stream)
$writer = [System.IO.StreamWriter]::new($stream)

$writer.WriteLine("Verbindung erfolgreich hergestellt. Willkommen!")

$message = $reader.ReadLine()
Write-Host "Nachricht vom Client: $message"

$reader.Close()
$writer.Close()
$stream.Close()
$client.Close()
$listener.Stop()

Es funktioniert auch, nur wird am Schluss ein Fehler ausgegeben.

TCP Listener gestartet. Warte auf Verbindung...
Nachricht vom Client: dd
Ausnahme beim Aufrufen von "Close" mit 0 Argument(en):  "Auf das verworfene Objekt kann nicht zugegriffen werden.
Objektname: "System.Net.Sockets.NetworkStream"."
In C:\Users\madm\desktop\listener.ps1:20 Zeichen:1
+ $writer.Close()
+ ~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ObjectDisposedException

Wie kann ich das beheben?

von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Weil der Code die Streams in umgekehrter Reihenfolge schließt. Du kannst $writer.Flush() direkt nach dem Schreiben der Nachricht einfügen damit die Nachricht sicher gesendet wird, bevor der StreamWriter geschlossen wird.

# Nachricht an den Client senden
$writer.WriteLine("Verbindung erfolgreich hergestellt. Willkommen!")
$writer.Flush()  # Wichtig: Den Puffer leeren, um die Nachricht zu senden
von