클라이언트 서버 프로그램에서 이미지 파일과 2 개의 int를 메시지로 보내고 싶습니다.QT에서 소켓을 통해 더 큰 물체를 전송하는 방법은 무엇입니까?
나는 이것에 대한 QLocalSocket
및 QImage
을 사용하고 있습니다.
그러나 이미지와 정수가 버퍼에 완전히 기록 된 후에 만 소켓을 읽는 방법을 모르겠다. readyRead
신호가 이미 첫 번째 바이트 수 이후에 발생하기 때문에.
여기 내 코드의 일부를 다음과 같습니다
// sending
QDataStream stream(socket);
stream << image << i << j;
// recieving
void MainWindow::readyRead() {
// ...
if (socket->bytesAvailable() > 400)
{
QByteArray b = socket->readAll();
QDataStream stream(&b, QIODevice::ReadOnly);
QImage image;
int i, j;
stream >> image >> i >> j;
// ...
}
}
내가 들어오는 파일 크기를 추측했지만, QImage는 PNG로 직렬화하기 때문에 데이터 크기가 가변적이며 때로는 파일의 끝이 기록되지 않습니다
내가 그것을 읽기 시작하기 전에 버퍼.
쉬운 해결책이 있습니까?
당신은 단지 첫 번째 이미지의 크기를 보낼 수 있습니까? 예를 들어 공통 인터페이스로 정의 된 헤더 구조. 보낸 사람 태그, 타임 스탬프, 이름 등의 유용한 정보도 포함 할 수 있습니다. – Dennis