クライアントがまだサーバーに接続されているかどうかをソケットを使ってチェックします。私はrevc関数がクライアントの状態を私に与えているのを見ましたが、クライアントが切断せず、revc関数が自分のことを思っていたので、期待通りに動作していません。クライアントがまだ接続されているかどうかを確認する方法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;
別のソリューションがあります: 私はこのコードを得ましたか。 ありがとうございます。
あなたのクライアントを特定する唯一の方法は、依然として応答しなければならない「そこにいる」要求を含むサーバーとクライアントの間に要求 - 応答プロトコルを実装することです。他の方法は結果があまり正確ではありません。 – mah
@mahそれは確かに方法ですが、唯一の方法ではありません。 – EJP
@EJPには、間違った報告の対象にならない他の方法がありますか? – mah