如何检查客户端是否仍然连接c ++

时间:2016-03-30 18:13:18

标签: c++ sockets client-server recv

我想使用套接字来检查客户端是否仍然连接到服务器。我看到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;

还有另一种解决方案吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

记住TCP / IP的来源非常重要。

它是一个旨在抵御全面核战争的通信协议栈。

这意味着,电报杆被蒸发,无线电链接断断续续或不再存在,电话交换不再存在......而且它仍然需要工作。

在这种情况下,定义&#34;已连接&#34;。

TCP&#34;连接&#34;仅仅是两个不同的主机相信它们已经连接,并且网络上剩余的路由器最终会以某种方式将数据包路由到主机。

这就是我们从未想过的大量协议的原因,例如RIP(路由信息协议)的工作是在轰炸后发现剩余的链接。

确实没有&#34;连接&#34;。自从您从远程主机收到数据包以来,已经过了一段时间。那就是它。