在QTcpSocket关闭后,将所有待处理数据发送到服务器Qt

时间:2016-10-11 12:29:11

标签: c++ qt sockets

我使用了很棒的Qt Framework开发了一个客户端 - 服务器程序。我的问题是:

在客户端,我有一个QMainWindow我在其中定义了QTcpSocket以便与服务器交换数据。

在关闭QMainWindow之前,我必须向服务器发送指定客户端已断开连接。我通过实现closeEvent方法来做到这一点。但当我关闭QMainWindow时,似乎套接字也被关闭,所有待处理的数据都会丢失。

那么如何在QMainWindow关闭之前检查是否所有数据都已发送到服务器,或者只是在发送所有剩余数据之前避免关闭套接字。

Qt代码:

void FenetreRoom::closeEvent(QCloseEvent *event)
{
    event->ignore() ;
    QDataStream out(&paquet, QIODevice::WriteOnly);
    QString messageAEnvoyer ="out"+nameVisiter+"/"+QString::number(idUser)+"/"+QString::number(posActuelle);
    out << (quint16) 0;
    out << messageAEnvoyer;
    out.device()->seek(0);
    out << (quint16) (paquet.size() - sizeof(quint16));        
    socket->write(paquet);                   
    event->accept();
} 

1 个答案:

答案 0 :(得分:0)

写完后添加socket->waitForBytesWritten();