Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

14.11.2007, 18:39

connect() in regelmäßigen zeitabständen prüfen

Hi,

ich programmiere grade einen chat in WinApi und habe ein kleines problem:

Wie kann ich mit connect() in regelmäßigen zeitabständen prüfen ob der server da ist, ohne zu blockieren?
Ich habe es mit einer Schleife und sleep probiert, doch da wird logischer Weise bockiert -.-
FD_CONNECT hilf mir auch nicht weil ich egal ob ich verbunden bin oder nicht immer FD_CONNECT kriege ^^

Kennt jemand eine bessere Lösung??

Hier der ganze Source vom Clienten:
http://nopaste.com/p/avSrghNvD
http://nopaste.com/p/aNzR5ZIV6
http://nopaste.com/p/aIcIu57rN

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

14.11.2007, 20:14

Wie? Du willst testen ob der Server noch da ist, mit dem du Verbunden bist? Dann schick doch einfach einen Request. So in der Art Ping-Pong, wie das IRC z.B. auch macht.
@D13_Dreinig

3

14.11.2007, 20:31

Nee ^^ Wenn der Server offline ist, dann sagt der Client das keine verbindung möglich ist und macht danach nichts mehr ^^
Wenn jetzt der Server während der Laufzeit des Clienten online geht, checkt der Client ja nicht mehr ob man verbinden kann, weil die connect() funktion schon ausgeführt wurde als der server offline war^^
deswegen will ich in regelmäßigen zeitabschnitten checken lassen^^ es sei den einer von euch kennt ne bessere Lösung^^

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

14.11.2007, 20:33

Mach einen zusätzlichen Thread der die Verbindung prüft.
@D13_Dreinig

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

14.11.2007, 20:41

Just LOL....das ist eine TCP Verbindung, richtig? Wenn der Server aufeinmal nicht mehr erreichbar ist, werden alle send und recv fehlschlagen. Über GetLastError kann man dann rausfinden wieso das so ist. Wenn du eine permanente Überprüfung haben willst, erstell dir per SetTimer ein WM_TIMER Event bei dem du immer wieder mal eine kleine Nachricht an den Server schickst. Wenn der Server off gegangen ist, wird das send fehlschlagen ;)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

6

14.11.2007, 22:28

Zitat von »"Nox"«

Just LOL....das ist eine TCP Verbindung, richtig? Wenn der Server aufeinmal nicht mehr erreichbar ist, werden alle send und recv fehlschlagen. Über GetLastError kann man dann rausfinden wieso das so ist. Wenn du eine permanente Überprüfung haben willst, erstell dir per SetTimer ein WM_TIMER Event bei dem du immer wieder mal eine kleine Nachricht an den Server schickst. Wenn der Server off gegangen ist, wird das send fehlschlagen ;)


Du hast das glaub ich nicht richtig verstanden^^
Nehmen wir mal an, der Server ist offline.
Dann versucht mein Client sich mit dem Server zu verbinden, was er aber nicht schaft (weil server of ist) und macht danach nixx mehr^^

Dh. wenn der Server erst online geht nachdem der Client connect() ausgeführt hat, merkt der client gar nicht das der server online gegangen ist^^

und deswegen will ich regelmäßig connect() ausführen^^

Zitat von »"David_pb"«

Mach einen zusätzlichen Thread der die Verbindung prüft.

Meinste das ist die eleganteste Lösung?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

14.11.2007, 22:56

Zitat von »"RebornX"«


Meinste das ist die eleganteste Lösung?


Jep!
@D13_Dreinig

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

8

15.11.2007, 06:49

Du kannst dann ja den Thread beenden, sobald eine Verbindung hergestellt wurde. Solange der Thread läuft wird der Client ja wahrscheinlich eh nicht viel machen.

9

15.11.2007, 13:19

Ja stimmt^^ Nagut dann mache ich das mit nen thread.... Muss nur erstmal gucken was ein thread überhaupt ist und wie man den einsetzt.....

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

15.11.2007, 13:34

Zitat von »"RebornX"«

Ja stimmt^^ Nagut dann mache ich das mit nen thread.... Muss nur erstmal gucken was ein thread überhaupt ist und wie man den einsetzt.....


Wenn du nichtmal weißt, was das ist... Wieso fragst du dann ob die Lösung per Thread "elegant" ist? Oo
@D13_Dreinig

Werbeanzeige