Hallo liebe Leute,
Ich bastle aktuell einen kleinen TcpServer. Dieser nimmt Verbindungen an, liest einen String vom Stream und sendet als Antwort einen String an den Client, danach
beendet er die Verbindung und wartet auf die nächste.
Code den ich verwende(nur der relevante Teil und etwas vereinfacht):
Spoiler anzeigen
Das ganze funktioniert auch sehr gut, wenn ich den Server unter Windows7/WindowsServer2012 ausführen lasse.
Lasse ich das ganze allerdings unter WindowsServer2016 ausführen, so kommen manchmal 1, manchmal 2 mal Daten von einem Client an, danach nicht mehr...
Habe schon einiges getestet aber noch nicht wirklich eine Lösung gefunden.
Was mir aufgefallen ist, als ich per CMD und "netstat" die Verbindungen angesehen habe:
Unter WS2016 "hängt" die Verbindung für einige Zeit in Status "TIME_WAIT", was erklären könnte, warum keine Anfragen mehr durchkommen.
Unter W7 ist dies nicht so.
Hat sich in dieser Richtung etwas zwischen Win7/WinServer2012 und WinServer2016 geändert?
Gibt es eine Möglichkeit, an dem Punkt wo ich aktuell Client.close() nutze, die Verbindung auch wirklich direkt zu beenden,
so dass direkt wieder neue Verbindungen angenommen werden können?
Gruß
shoddi
Ich bastle aktuell einen kleinen TcpServer. Dieser nimmt Verbindungen an, liest einen String vom Stream und sendet als Antwort einen String an den Client, danach
beendet er die Verbindung und wartet auf die nächste.
Code den ich verwende(nur der relevante Teil und etwas vereinfacht):
VB.NET-Quellcode
- While runListener
- client = Server.AcceptTcpClient
- stream = client.GetStream()
- streamr = New StreamReader(stream, System.Text.Encoding.ASCII)
- streamw = New StreamWriter(stream, System.Text.Encoding.ASCII)
- scString = streamr.ReadLine()
- Dim response As String = Chr(27) & "[1;1H" & Chr(27) & "[0K" & Chr(27) & "[2;1H" & Chr(27) & "[0K" & Chr(27) & "[3;1H" & Chr(27) & "[0K" & Chr(27) & "[4;1H" & Chr(27) & "[0K"
- response = response & Chr(27) & "[1;1H" & "ECHO" & Chr(27) & "[3;1H" & scString & Chr(0)
- streamw.WriteLine(response)
- streamw.Flush()
- stream.Close()
- client.Close()
- End While
Das ganze funktioniert auch sehr gut, wenn ich den Server unter Windows7/WindowsServer2012 ausführen lasse.
Lasse ich das ganze allerdings unter WindowsServer2016 ausführen, so kommen manchmal 1, manchmal 2 mal Daten von einem Client an, danach nicht mehr...
Habe schon einiges getestet aber noch nicht wirklich eine Lösung gefunden.
Was mir aufgefallen ist, als ich per CMD und "netstat" die Verbindungen angesehen habe:
Unter WS2016 "hängt" die Verbindung für einige Zeit in Status "TIME_WAIT", was erklären könnte, warum keine Anfragen mehr durchkommen.
Unter W7 ist dies nicht so.
Hat sich in dieser Richtung etwas zwischen Win7/WinServer2012 und WinServer2016 geändert?
Gibt es eine Möglichkeit, an dem Punkt wo ich aktuell Client.close() nutze, die Verbindung auch wirklich direkt zu beenden,
so dass direkt wieder neue Verbindungen angenommen werden können?
Gruß
shoddi