2012-12-12 4 views
0

나는 TCP를 통해 일부 이미지를 보내야하는 응용 프로그램을 만들고 있습니다.qtcpsocket 통해 qimage 보내기 : 데이터의 일부만 수신

보내는 부분은

QImage image; 
image.load("image.png", "PNG"); 
image.setText("name", "color"); 
QByteArray ba; 
QBuffer buffer(&ba); 
image.save(&buffer, "PNG"); 
int bsize = ba.size(); 
sendData(MESSAGE_BACKGROUND_COLOR, QString::number(ba.size()).toStdString()); 
int bsent = m_tcpSocket->write(ba, ba.size()); 
if(!m_tcpSocket->waitForBytesWritten(-1)) 
{ 
    qDebug() << "written Bytes error " << m_tcpSocket->errorString(); 
} 
m_tcpSocket->flush(); 

클라이언트입니다 :

QByteArray buffer; 
buffer = m_ConnectedClients[i]->read(messageSize); 
int bytesS = buffer.size(); 
QImage image; 
image.loadFromData(buffer.data()); 
if (image.isNull()) 
{ 
    qDebug("The image is null. Something failed."); 
} 

문제는 서버가 모든 데이터를 보내는 것 같다 경우, 클라이언트는 헤더를 수신입니다 ..
(물론 프로그램이 라인에서 충돌 함)

image.loadFromData (buffer.data());

은 TCP 통신은

어떤 아이디어 ... 텍스트 만이 확인을 통해 이동 포함 된 다른 메시지 때문에, 작품을 좋아?

미리 감사드립니다. 나는 모든 데이터를 가지고 때까지 소켓에서 읽을 수있는 수신 끝을 설정하는 데 필요한

다른 사람이 같은 문제가있는 경우

답변

0

... 그리고 내 자신의 질문에 대답 ... ...

:

int bytesS = 0; 
while(byteS < messageSize) 
{ 
    buffer->append(m_ConnectedClients[i]->readAll()); 
    bytesS = buffer->size(); 
    if (bytesS == messageSize) 
    { 
     QImage image; 
     image.loadFromData(*m_ConnectedClients[i]->buffer, "PNG"); 
     if (image.isNull()) 
     { 
     qDebug("The image is null. Something failed."); 
     } 
    } 
}