大家好我做了一个服务器和一个客户端,在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
有人可以帮助告诉我为什么它不起作用以及如何让我的客户工作?
答案 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();
}