我想使用套接字来检查客户端是否仍然连接到服务器。我看到revc函数给了我客户端的状态,但它没有按照我的预期工作(sometines客户端没有断开连接,revc函数认为他是)。 我得到了这段代码:
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;
还有另一种解决方案吗? 提前谢谢。
答案 0 :(得分:0)
记住TCP / IP的来源非常重要。
它是一个旨在抵御全面核战争的通信协议栈。
这意味着,电报杆被蒸发,无线电链接断断续续或不再存在,电话交换不再存在......而且它仍然需要工作。
在这种情况下,定义&#34;已连接&#34;。
TCP&#34;连接&#34;仅仅是两个不同的主机相信它们已经连接,并且网络上剩余的路由器最终会以某种方式将数据包路由到主机。
这就是我们从未想过的大量协议的原因,例如RIP(路由信息协议)的工作是在轰炸后发现剩余的链接。
确实没有&#34;连接&#34;。自从您从远程主机收到数据包以来,已经过了一段时间。那就是它。