我使用了很棒的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();
}
答案 0 :(得分:0)
写完后添加socket->waitForBytesWritten();
。