C++ Qt TCP客户端无法显示收到的图像

C++ Qt TCP客户端无法显示收到的图像,c++,qt,sockets,tcp,C++,Qt,Sockets,Tcp,因此,我试图编写一个TCPserver和一个tcp客户端。服务器发送一些图片,客户端将它们作为标签中的pixmap加载。我能够连接到服务器,发送数据。我的客户似乎收到了一些,但从来没有显示图片 我认为我的逻辑是好的,但它从来都不起作用 服务器端 clientthread.h private: int socketDescriptor; int m_indDerniereImage; bool m_quit; QByteArray getByteArray(int

因此,我试图编写一个TCPserver和一个tcp客户端。服务器发送一些图片,客户端将它们作为标签中的pixmap加载。我能够连接到服务器,发送数据。我的客户似乎收到了一些,但从来没有显示图片

我认为我的逻辑是好的,但它从来都不起作用

服务器端

clientthread.h

private:
    int socketDescriptor;
    int m_indDerniereImage;
    bool m_quit;
    QByteArray getByteArray(int indice);
    QString getNumNomFichier(int inndImages);
clientthread.cpp

void ClientThread::run()
{

    while(m_quit == false)
    {
        //Vérifier si notre image est à jour.
        if (m_indDerniereImage != g_indImage)
        {
            m_indDerniereImage = g_indImage;
            QByteArray bEnvoi = getByteArray(m_indDerniereImage);
            m_tcpSocket->write(bEnvoi);
            m_tcpSocket->flush();
        }
    }

}


QByteArray ClientThread::getByteArray(int indice)
{
    QString pathimage = g_PathDossierImage +  + "sintel_trailer_" + "0339" + ".jpg";
    QPixmap pixmapimage(pathimage);
    QByteArray bImage;
    QBuffer buffer(&bImage);
    buffer.open(QIODevice::ReadWrite);
    pixmapimage.save(&buffer, "JPG");
    buffer.close();
    buffer.deleteLater();
    return bImage;
}

QString ClientThread::getNumNomFichier(int indImages)
{

    if (indImages < 10)
        return "000" + QString::number(indImages);
    else if(indImages < 100)
        return "00" + QString::number(indImages);
    else if(indImages < 1000)
        return "0" + QString::number(indImages);
    else
        return QString::number(indImages);
}


void ClientThread::onStateChanged(QAbstractSocket::SocketState status)
{
    if (status == QAbstractSocket::UnconnectedState)
    {
        g_nbclients--;
        m_quit = true;
    }
}
void StreamerThread::run()
{
    QByteArray buffReception;
//port et ip a hardcoder
    int port=4000;
    QString IP="127.0.0.1";

    socket.connectToHost(IP,port);
    socket.waitForConnected(15000);
    socket.waitForReadyRead(8000);
    while(m_quit==0)
    {
        if(socket.canReadLine())
        {
            buffReception=socket.readAll();
            m_baImage=buffReception;
            if(buffReception.size()>0)
                emit(signalNouvelleImage(m_baImage));
        }
    }
    socket.disconnect();

}
streamerthread.cpp

void ClientThread::run()
{

    while(m_quit == false)
    {
        //Vérifier si notre image est à jour.
        if (m_indDerniereImage != g_indImage)
        {
            m_indDerniereImage = g_indImage;
            QByteArray bEnvoi = getByteArray(m_indDerniereImage);
            m_tcpSocket->write(bEnvoi);
            m_tcpSocket->flush();
        }
    }

}


QByteArray ClientThread::getByteArray(int indice)
{
    QString pathimage = g_PathDossierImage +  + "sintel_trailer_" + "0339" + ".jpg";
    QPixmap pixmapimage(pathimage);
    QByteArray bImage;
    QBuffer buffer(&bImage);
    buffer.open(QIODevice::ReadWrite);
    pixmapimage.save(&buffer, "JPG");
    buffer.close();
    buffer.deleteLater();
    return bImage;
}

QString ClientThread::getNumNomFichier(int indImages)
{

    if (indImages < 10)
        return "000" + QString::number(indImages);
    else if(indImages < 100)
        return "00" + QString::number(indImages);
    else if(indImages < 1000)
        return "0" + QString::number(indImages);
    else
        return QString::number(indImages);
}


void ClientThread::onStateChanged(QAbstractSocket::SocketState status)
{
    if (status == QAbstractSocket::UnconnectedState)
    {
        g_nbclients--;
        m_quit = true;
    }
}
void StreamerThread::run()
{
    QByteArray buffReception;
//port et ip a hardcoder
    int port=4000;
    QString IP="127.0.0.1";

    socket.connectToHost(IP,port);
    socket.waitForConnected(15000);
    socket.waitForReadyRead(8000);
    while(m_quit==0)
    {
        if(socket.canReadLine())
        {
            buffReception=socket.readAll();
            m_baImage=buffReception;
            if(buffReception.size()>0)
                emit(signalNouvelleImage(m_baImage));
        }
    }
    socket.disconnect();

}

我不知道我是否需要在收到的每张图片之间做些什么,或者我能做些什么?

对客户端的线程进行了一些更改,它起到了作用,我现在正在获取一些图片。 在streamerthread.cpp中

void StreamerThread::run()
{
    QByteArray monImage;
//port et ip a hardcoder
    int port=4000;
    QString IP="127.0.0.1";
    socket.connectToHost(IP, port);
    socket.waitForConnected(15000);
    socket.waitForReadyRead(8000);

    //Écouter et recevoir du serveur
    while(m_quit==0)
    {
        socket.waitForReadyRead(30000);
        if(socket.bytesAvailable() > 0)
        {
            monImage=socket.read(70000);
            m_baImage=monImage;
            emit(signalNouvelleImage(m_baImage));
       }
    }
    socket.disconnectFromHost();
    socket.close();

}