2013-09-05 25 views
0

大家好,我做了服務器和客戶端,在這loaclHost完美programms的工作,但是當我本地主機改變我的IP客戶端不再接收所有數據,所以我決定重寫碼。這裏是我的新代碼的一部分:與QTcpSocket未收到所有數據

 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 

有人可以幫我告訴爲什麼一點兒也不工作,以及如何讓我的客戶的工作?

+0

我認爲,你的IP地址是無效的。檢查ipconfig並確認。如果無效,請繼續使用localhost/127.0.0.1。並請提供更多信息以改善您的示例代碼。 – Ashif

+0

它不是一個IP問題的客戶端有一個洛頁,因此,如果客戶端沒有找到該服務器的客戶端將留到洛頁面而且服務器發送4信息到客戶端,首先是消息的類型(如:聊天消息或消息的消息),所述第二新的(爲QString的標題),三是的消息(爲QString)的含量,最後是源(爲QString),客戶端服務器接收2第一信息但沒有收到第三信息(長文本) –

+0

通過服務器 - > waitForBytesWritten(4000)延遲,那麼服務器 - >寫(數據)寫入第二個標題,設置服務器後; – Ashif

回答

1

使用TCP連接時,你永遠無法知道有多少包發送到郵件提交。但是你可以讓Qt處理那些東西。你nedd實施這樣的事情:

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(); 
}