2013-09-05 4 views
0

안녕하십니까, loaclHost에서이 프로그램은 완벽하게 작동하지만, localHost를 내 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 

누군가 내이 일을 does'nt 어떻게 내 클라이언트 작업을 할 이유는 무엇입니까?

+0

나는 여러분의 IP 주소가 유효하지 않다고 생각합니다. ipconfig를 확인하고 확인하십시오. 올바르지 않으면 localhost/127.0.0.1을 계속하십시오. 또한 샘플 코드를 더 자세하게 개선하십시오. – Ashif

+0

그것은 IP 문제가 아니므로 클라이언트가 로그 페이지를 가지고 있으므로 클라이언트가 서버를 찾지 못하면 클라이언트가 로그 페이지에 머물러있게됩니다. 또한 서버는 클라이언트에 4 개의 정보를 보내고, 첫 번째는 메시지 유형입니다 (예 : : 채팅 메시지 또는 뉴스 메시지), 두 번째 새 헤드 라인 (QString) 세 번째는 뉴스 (QString)의 내용이고 마지막은 소스 (QString)이며 클라이언트 서버는 두 번째 첫 번째 정보 세 번째 정보 (긴 텍스트)를 수신하지 마십시오 –

+0

두 번째 헤드 라인을 작성한 후 서버 -> waitForBytesWritten (4000) 지연에 의해 서버를 설정 한 다음 서버 -> 쓰기 (데이터); – Ashif

답변

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(); 
} 
관련 문제