C++ Qt TCP客户端无法显示收到的图像
因此,我试图编写一个TCPserver和一个tcp客户端。服务器发送一些图片,客户端将它们作为标签中的pixmap加载。我能够连接到服务器,发送数据。我的客户似乎收到了一些,但从来没有显示图片 我认为我的逻辑是好的,但它从来都不起作用 服务器端 clientthread.hC++ 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
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();
}