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.
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
@mah Das ist sicherlich ein Weg, aber es ist nicht der einzige Weg. – EJP
@EJP Gibt es andere Möglichkeiten, die nicht falsch gemeldet werden? – mah