簡體   English   中英

QtcpSocket如何同時發送多個信息?

[英]How to send multiple information trought QTcpSocket at the same time?

即時通訊正在做一個小的客戶端/服務器預訂應用程序,即時通訊卡住了我如何發送類的信息,實際上我有3個類,即時通訊發送這樣的信息:

VentanaPrincipalS::VentanaPrincipalS(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::VentanaPrincipalS)
{
  //..Methods..//
  connect(conexion,SIGNAL(nuevaConexion(QTcpSocket*)), this, SLOT(enviarDataCliente(QTcpSocket*)));
  connect(conexion,SIGNAL(nuevaConexion(QTcpSocket*)), this, SLOT(enviarDataVuelo(QTcpSocket*)));
  connect(conexion,SIGNAL(nuevaConexion(QTcpSocket*)), this, SLOT(enviarDataReservacion(QTcpSocket*)));
   //..Methods..//
}
void VentanaPrincipalS::enviarDataVuelo(QTcpSocket *sock)
{
  QByteArray buffer;
  QDataStream out(&buffer, QIODevice::ReadWrite);
  out << 1;
  for(int i = 0; i < empresa.cantidadVuelos(); i++){
      out << empresa.getVuelos().at(i)->getDestino() << empresa.getVuelos().at(i)->getIdVuelo() << empresa.getVuelos().at(i)->getPartida();
  }
  if(sock->isValid())
  {
    sock->write(buffer);
  }

}
//2 More methods just like this, switching the out first number
to know which class is...//

在客戶端,我收到這樣的消息:

in>> caracterControl;
    switch(caracterControl){
    case 1:{
        while(!in.atEnd()){
            QString destino;
            QString id;
            QDate fecha;
            in >> destino >> id >> fecha;
            qDebug()<< destino +" "+ id + " " + fecha.toString();
            MVuelo vuelop(id, destino, fecha);
            listaVuelos.append(id);
            vuelosRecibidos.push_back(vuelop);
        }
     }
     case 2:{
        while(!in.atEnd()){
            QString cedula;
            QString correo;
            QString nombre;
            QString telf;
            in >> cedula >> correo >> nombre >> telf;
            MCliente cliente(nombre, cedula, telf, correo);
            qDebug()<< "Cliente: " + cedula;
        }
     }
    case 3:{
       while(!in.atEnd()){
           QString reserva;
           QString vuelo;
           in >> reserva >> vuelo;
           qDebug()<< "Reserva: " + reserva;
       }
    }

}

1、2或3,具體取決於類別。

問題在於信息不完整,就像套接字崩潰是因為另一種方法正在他身上寫消息一樣,是否有辦法按順序接收所有信息,還是有辦法告訴服務器套接字已完成讀取?

請幫我 ;(...

PD:是的,服務器和套接字已成功連接,請確保:)

注意:我有一個帶有3個客戶端(21727090、20350202和123)的QList,並且即時消息接收此槽qDebug()

2

“客戶:21727090”

“客戶:20350202”

“客戶:123”

“客戶:”

“客戶:”

“客戶:”

問題在於信息不完整,就像套接字崩潰是因為另一種方法正在他身上寫消息一樣,是否有辦法按順序接收所有信息,還是有辦法告訴服務器套接字已完成讀取?

最快的解決方法是在寫入后在其中放置一個阻塞(即同步)等待,如下所示:

if (sock->isValid())
{
    sock->write(buffer);
    if (!sock->waitForBytesWritten(5000))
        qDebug() << QString("Operation timed out or an error occurred for sock, error: %1).arg(sock->errorString());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM