QT 및 C++의 초보자입니다. QThreadpools를 사용하여 QTcpserver를 만들려고 노력 중이므로 여러 클라이언트를 처리 할 수 있습니다. 여러 클라이언트가 문제없이 연결할 수 있습니다. 하지만 이미지 데이터의 끝을 나타내는 "IMGPNG"꼬리말을 사용하여 Android 휴대 전화에서 이미지를 보내려고합니다. 이제 readyRead 신호가 방출 될 때의 문제는 사용 가능한 모든 데이터를 읽은 다음 나중에 일부 문자열 연산을 수행하고 이미지를 재구성하는 것입니다. 각 클라이언트의 전체 이미지를받는 방법을 잘 모름.Qt 스레드 풀을 사용하여 readyRead()에서 모든 데이터를 한 번에 수신 할 수 없습니다.
void VireClients::readyRead()//read ready
{
int nsize = socket->bytesAvailable();//trying to check the available bytes
qDebug()<< "Bytes Available" << nsize;
while(socket->bytesAvailable() < nsize){
QByteArray data = socket->readAll();//how to receive all the data and then process it
}
/*!These lines call the threadpool instance and reimplement run*/
imageAnalysis = new VireImageAnalysis(); //creating a new instance of the QRunnable
imageAnalysis->setAutoDelete(true);
connect(imageAnalysis,SIGNAL(ImageAnalysisResult(int)),this,SLOT(TaskResult(int)),Qt::QueuedConnection);
QThreadPool::globalInstance()->start(imageAnalysis);
}
데이터를 완전히 가져 오거나 수신 된 데이터를 이미지 형식으로 저장하는 방법을 모르겠습니다. 나는 이미지 데이터를 완전히받는 방법을 알고 싶다. 도와주세요.
데이터 손실로 이어질 수있는 버그가 Qt 구현에 있기 때문에 네트워킹 대신 boost Asio를 사용하는 것이 좋습니다. 그 측면에서 Qt를 고수하고 싶다면 행운의 서버/클라이언트 예제를보십시오. – Pete
'bytesAvailable'을 체크하지 마십시오. 그것이 가지고있는만큼 많은 것을 읽으십시오. 네가 모든 것을 얻지 못했다면, 더 읽어라. –