Hallo,
bin gerade 2 kleine Skripts am schreiben.
Ich möchte ein Server - Client Programm schreiben, soweit alles gut.
Hin und her schicken, also senden und empfangen klappt, aber wie kann ich überprüfen, ob der client oder Server noch existiert.
Wenn ich den Client neustarte funktioniert der Austausch nicht mehr.
Jemand eine Idee?
Server Client, ExistVerbindung?
-
DanielZ86 -
10. Oktober 2012 um 21:38 -
Geschlossen -
Erledigt
-
-
Erst mal eine grundsätzliche Frage..
Über welche Methode kommunizieren denn dein Server und der Client?
Lg,
Pustekuchen
-
Würde sagen TCPListen
-
Ok, da du tcp nicht von hand machst.. gelten trotzdem die gleichen Regeln..
Client beenden und wieder neu starten, heisst auch.. das die Verbindung
nach Client beenden auch wieder erneut aufgebaut werden muss. Sollte
dein Server das nicht mitbekommen, das die Verbindung futsch ist.. weist
du jetzt wo du ansetzen kannst :o)Lg,
Pustekuchen
-
Sorry hab die Frage falsch verstanden.
Mit TCPAccept und TCPConnect wird die Verbindung zugelassen.
Dachte, wenn TCPAccept(oder auf der Clientseite TCPConnect) >=0 ist, das einfach die aktuelle Listen beendet wird und neugestartet.
Hab ich einen Fehler? -
Du musst immer @error nach TCPSend und TCPRecv prüfen.
Ist dieser nicht 0, wurde der Client oder Server beendet bzw. ist aus irgendeinem Grund nicht erreichbar.Clientside müsstest du dann mit TCPConnect einen neuen Verbindungsversuch machen. Vom Server aus, TCPAccept...
-
Also eines der ersten nützlichen Dinge die mir hier gesagt wurden war..
Poste deinen Quelltext.. und es kann dir geholfen werden weil man es
vieleicht versteht was du da probierst :o)Lg,
Pustekuchen
-
Alles klar, danke.
Daran hab ich gar nicht gedacht.
Kann also eine Pseudonachricht abschicken und nur testen, ob die Gegenseite noch antwortet.
Kann man auch 2 oder mehr Clients verbinden? -
Wenn du ein Array verwendest, kannst du 'beliebig' viele Clients connecten lassen.
Der Umgang damit erfordert aber etwas Erfahrung und natürlich logisches Denken. -
Ja klar geht das auch mit mehr Clients..
Lese dir dazu ausführlich diesen Beitrag durch und es wird fast alle deine Fragen beantworten :o)
Link: [ gelöst ] tcp server / client
Lg,
Pustekuchen
-
Hi,
[autoit]
habe mal einige Zeilen aus DeskStream kopiert, dort machen wir das so:
Client:$sresv = TCPRecv($iConnect, 1) ;ein zeichen aus dem puffer holen
[/autoit]
If @error Then ;verbindung zum server verloren
MsgBox(16, "DeskStream 2 Client", "Verbindung unterbrochen.")
ExitLoop
EndIf
Server:
Ineinandergeschachtelte Loops, der "äußere" arbeitet die etablierten Verbindungen ab, falls einer der Clients die Verbindung beendet, wird das durch einen @ERROR bei TCPRecv() erkannt und der Socket geschlossen, der Server wartet dann auf weitere Verbindungen.Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
While 1 ;äusserer loopWhile Sleep(10) ;warten auf Client
[/autoit]
If $iConnection = -1 Then $iConnection = TCPAccept($iSock); client hat sich verbunden
If $iConnection <> -1 Then ExitLoop
WEnd
;hauptschleife
While 1 ;Sleep(10)
;blabla
TCPSend($iConnection, Hex($zoom_w) & Hex($zoom_h))
While Sleep(10) ;Verbindung zu client besteht
$sResv = TCPRecv($iConnection, 2) ;Daten empfangen
;blabla
WEnd
;blabla
;blabla
Do ;warten auf client
$a = TCPRecv($iConnection, 1, 1); BinärDaten holen
If @error Then ExitLoop 2 ;springt zu XXXXX
If $a <> "" Then $recv &= Hex($a, 2)
Until StringLen($recv) = (2 * $structsize) ;es wurde etwas gesendet
;blabla
WEnd
;XXXXX
;blabla
TCPCloseSocket($iConnection)
$iConnection = -1
WEnd//EDIT// ist nicht von der Multiclient-Variante, aber wenn man überhaupt verstanden hat, was man tut (bzw. tun muss) ist der Rest ja einfach...