2016-03-30 15 views
0

Ich möchte überprüfen, mit Sockets, ob ein Client noch mit dem Server verbunden ist. Ich sah, dass die revc-Funktion mir den Status des Clients gibt, aber es funktioniert nicht, wie ich es erwarte (ein Client hat die Verbindung nicht getrennt und die revc-Funktion dachte, er sei). Ich habe diesen Code:Wie überprüft man, ob ein Client noch verbunden ist? C++

if (recv(client->getSocket(), rcmsg, 1024, 0) <= 0) 
    { 
     bool found = false; 
     for (i = 0; i < this->clients.size(); i++) 
     { 
      if (*(this->clients[i]) == *client) 
      { 
       found = true; 
       break; 
      } 
     } 
     if (found) 
      this->clients.erase(this->clients.begin() + i); 
     closesocket(client->getSocket()); 
     std::cout << "disconected: socket = " << client->getSocket() << ", ip = " << inet_ntoa(addr.sin_addr) << endl; 

Es gibt eine andere Lösung? Vielen Dank im Voraus.

+0

Die einzige Möglichkeit, sicher zu sein, dass Ihr Client noch vorhanden ist, besteht darin, ein Anfrage-Antwort-Protokoll zwischen Server und Client zu implementieren, das eine Anfrage "Sie sind dort" enthält, auf die geantwortet werden muss. Andere Methoden sind in ihren Ergebnissen weniger genau. – mah

+0

@mah Das ist sicherlich ein Weg, aber es ist nicht der einzige Weg. – EJP

+0

@EJP Gibt es andere Möglichkeiten, die nicht falsch gemeldet werden? – mah

Antwort

0

Es ist wichtig zu wissen, woher TCP/IP kam.

Es ist ein Kommunikationsprotokollstapel, der entworfen wurde, um einem totalen Atomkrieg standzuhalten.

Das heißt, Telegraphenmasten werden verdampft, Funkverbindungen intermittierend oder nicht mehr da, Telefonvermittlung ist nicht mehr da ... und es musste trotzdem funktionieren.

In diesem Zusammenhang "connected" definieren.

Eine TCP- "Verbindung" besteht lediglich aus zwei unterschiedlichen Hosts, die glauben, dass sie verbunden sind, und irgendwie werden Pakete schließlich von den verbleibenden Routern im Netzwerk an die Hosts weitergeleitet.

Deshalb gibt es eine ganze Reihe von Protokollen, an die wir nicht einmal denken, zum Beispiel RIP (Routing Information Protocol), dessen Aufgabe es ist, die verbleibenden Verbindungen nach dem Bombardement zu finden.

Es gibt wirklich nicht so etwas wie "verbunden". Es ist einfach die Zeit vergangen, seit Sie ein Paket vom Remote-Host erhalten haben. Das ist es.

Verwandte Themen