QTcpSocket不接收所有数据

时间:2013-09-05 15:35:49

标签: qt tcp client-server qtcpsocket

大家好我做了一个服务器和一个客户端,在loaclHost这个程序运行完美但是当我将localHost更改为我的ip时,客户端不再接收所有数据,所以我决定重写代码。这是我新代码的一部分:

       void fenPrincipal::test()
      {

qDebug()<<tailleContenu<<"taille Contenu 1";
QDataStream in(actualSocket);
  if (tailleContenu == 0) 
{             
if (actualSocket->bytesAvailable() < (int)sizeof(quint64)) 
               return;

          in >> tailleContenu; 
          qDebug()<<tailleContenu<<"taille Contenu";
  }


  a =  actualSocket->bytesAvailable();
  qDebug()<<actualSocket->bytesAvailable()<<"byte available";

   if ( a <  tailleContenu) 
   {
       return;
   }
   else if (a>tailleContenu){
   QString messageRecue;
   in >> messageRecue;
   qDebug()<<messageRecue<<"message";
tailleContenu=0;

   }
}

这是调试信息:

  1448 byte available 
  "Dragon Age: Inquisition -Du gameplay, des images et des détails" titre <- it's the second information send by the server
    0 taille Contenu 1 
   2812 taille Contenu 
   1310 byte available 
   2812 taille Contenu 1 
   1460 byte available 
   2812 taille Contenu 1 
   2920 byte available 
   "" message
   0 taille Contenu 1 
   30962754250670195 taille Contenu 
   1452 byte available 
   30962754250670195 taille Contenu 1 
   2912 byte available 
   30962754250670195 taille Contenu 1 
   4372 byte available 
   30962754250670195 taille Contenu 1 
   5832 byte available 
   30962754250670195 taille Contenu 1 
   6806 byte available 

有人可以帮助告诉我为什么它不起作用以及如何让我的客户工作?

1 个答案:

答案 0 :(得分:1)

使用tcp连接,在提交邮件之前,您永远不会知道要发送多少个包。但你可以让Qt处理那些东西。你需要实现这样的东西:

connect( m_pTcpServer, SIGNAL( newConnection()), SLOT( solt_newConnection()) );

void CTcpManager::solt_newConnection() {
  m_pTcpSocket = m_pTcpServer->nextPendingConnection();
  connect( m_pTcpSocket, SIGNAL(readyRead()), this, SLOT( slot_startRead() ) );
}

void CTcpManager::slot_startRead() {
  QByteArray grDatagram;
  grDatagram = m_pTcpSocket->readAll();

  // Process data

  m_pTcpSocket->close();
}