QT server服务端如何判断客户端断开连接

Posted 下个季节的风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT server服务端如何判断客户端断开连接相关的知识,希望对你有一定的参考价值。

在QT编程中有时会用到server服务端与客户端进行TCP网络通信,服务端部分代码如下:

1、创建server用于监听客户端套接字

this->server = new QTcpServer(this);
this->server->listen(QHostAddress::Any,5001);
connect(this->server,SIGNAL(newConnection()),this,SLOT(newConnection()));

2、newConnection()函数

//信号槽函数--新的设备连接
void Widget::newConnection()
{
    //查询空闲的套接字
    for(int i = 0; i<SOCKET_MAXNUM; i++)
    {
        if(!this->socketFlag[i])
        {
            this->socketIndex = i;
            break;
        }
    }
    this->socket[socketIndex] = this->server->nextPendingConnection();
    this->socketFlag[socketIndex] = SOCKET_FLAG_CONNECTED;
    connect(this->socket[socketIndex],SIGNAL(readyRead()),this,SLOT(readData()));
    scan_Device();
}

3、update_DeviceNetState()函数用于检测更新socket状态

//更新设备连接状态,清理释放过期的SOCKET
void Widget::update_DeviceNetState()
{
    int onlineDeviceNum = getChildItemCount(DEVICE_TB_ONLINE_DEVICE);
    qDebug()<<"Line-658 当前在线设备数量:"<<onlineDeviceNum;
    for(int i = 0;i<onlineDeviceNum;i++)
    {
        int socketID  = ui->DEVICE_TABLE->topLevelItem(DEVICE_TB_ONLINE_DEVICE)->child(i)->data(3,Qt::SocketIndex).toInt();
        bool netState = send_WakeHand(socket[socketID]);
        qDebug()<<"此设备在线? "<<netState;
        if(netState == STATE_OFFLINE)
        {
            clearSocket(socketID);
            deviceNetStateChange(i,DEVICE_TB_OFFLINE_DEVICE,DEVICE_TB_ONLINE_DEVICE,-1);
        }
    }
}

4、send_WakeHand(QTcpSocket *currSocket) 发送握手信号返回套接字返回值

//发送握手信号,判断设备是否掉线
bool Widget::send_WakeHand(QTcpSocket *currSocket)
{
    int ret = currSocket->write("wake hands");
    qDebug()<<"ret ="<<ret;
    if(ret == -1)
        return STATE_OFFLINE;
    return STATE_ONLINE;
}

5、利用定时器QTimer定时检查更新套接字状态

QTimer *timer = new QTimer(this);
//定时检查更新设备的网络状态    
connect(timer,SIGNAL(timeout()),this,SLOT(update_DeviceNetState()));
timer->start(1000);

代码仅供学习参考,未经允许,禁止转载

 

以上是关于QT server服务端如何判断客户端断开连接的主要内容,如果未能解决你的问题,请参考以下文章

C# TcpListener如何知道客户端已经断开连接

易语言 客户端如何判断与服务器掉线

如何判断socket客户端连接断开

断开Qt后连接到服务器时客户端程序崩溃

Socket服务器端如何检测客户端的连接状态?

socket编程中,服务器如何检测到客户端网络连接的断开.比如说客户端的网线断掉了,从服务端如何能检测到呢l