QTCP przesyłanie obrazu (klient-serwer)

0

Witam. Staram się przesłać obraz QImage przez socket QTCP. Podczas przesyłania po stronie serwera program nieoczekiwanie kończy działanie, w trybie debugowania zauważyłem, że zatrzymuje się na linijce odpowiedzialnej za odbieranie. Korzystam z poniższych instrukcji:
Klient:

 QImage image;   
image.load("test.png", "PNG");
socket->connectToHost(address, port);
QByteArray ba;             
QBuffer buffer(&ba);      
image.save(&buffer, "PNG"); 
socket->write(ba);     

Serwer:

 QTcpSocket* socket;
QBuffer* buffer = buffers.value(socket);
qint64 bytes = buffer->write(socket->readAll()); //w tej linijce dostaje komunikat, że system wymusił działanie podprocesu 
buffer->seek(buffer->pos() - bytes);  
QImage image;			     
image.loadFromData(buffer->buffer());
if (image.isNull())		     
        qDebug("The image is null. Something failed.");

Dodam, że pracuje w programie QT Creator pod Linuxem. Czy powyższe instrukcje są poprawne? Jak mogę rozwiązać problem? Z góry dziękuję za wszelką pomoc:)

1

Twój kod wygląda dość słabo - na mój gust źle obrabiasz QByteArray a później źle odbierasz dane. Zapoznaj się solidnie z przykładami serwera i klienta jakie są w dokumentacji Qt - linki podałem poniżej.

http://qt-project.org/doc/qt-4.8/network-fortuneserver.html
http://qt-project.org/doc/qt-4.8/network-fortuneclient.html

0

Co do obciążenia to czy aby na pewno te 40% obciążenia to taki duży problem? Może niekoniecznie - w końcu procesor powinien pracować i może niepotrzebnie chcesz optymalizować.

Co do odpowiedzi to możesz np. zanim zapisujesz do bufora spróbować zmniejszyć obraz(jeśli oczywiście można).
Co do kompresji to można wywołać metodę save z wartośćią kompresji - nie wiem czy to wpłynie znacząco na obciążenie ale możesz potestować.

0

Co jeszcze mi przychodzi do głowy to czy obciążenie jest w wersji debug czy release? Release teoretycznie ma szansę na szybsze działanie.
Jeśli masz więcej rdzeni to możesz wykorzystać wątki by np. coś liczyć na innym rdzeniu by rozłożyć obciążenie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1