QTcp - problem z czytaniem.

0

Witam,
mam problem z czytaniem danych wysyłających przez socket, ponieważ gdy używam funkcji read, np:

char *text;
client->read(text,10);

To zmienna text i tak jest pusta, nie ma tego co socket wysłał.
O co chodzi? Mógłby mi ktoś dać jakiś przykładowy kod z "czytaniem" tego co wysyła client?
Z góry dziękuje za pomoc.

0

Bo najpierw musisz zaalokować pamięć na tą twoją zmienną:

char* text = new char[10];
0

Dzięki ;o
Głupi błąd popełniłem, widocznie jestem jakiś niedouczony czy coś.

0

Mam jednak jeszcze jedną sprawę.
Mam takie coś:

    char* text = new char;
    int bit = socket->bytesAvailable();
     socket->read(text, bit);
     QString bity;
     bity.setNum(bit);
     ui->textBrowser->setHtml(ui->textBrowser->toHtml() + text + ": " + bity );

Funkcja ta ma za zadanie czytanie tego co nam wysyła socket i wypisywanie tego na ekranie wraz z ilością bitów, ale niestety na ekranie razem z tekstem pojawiają się jakieś śmieć z pamięci:

aýýýýÝÝÝÝÝÝÝÝÝÝÝÌ: 1
býýýýÝÝÝÝÝÝÝÝÝÝÝ: 1
cýýýýÝÝÝÝÝÝÝÝÝÝÝ: 1

A powinno być:

a: 1
b: 1
c: 1

Co zrobić aby tych śmieci nie było?
Z góry jeszcze raz dziękuje za pomoc.

0

Po pierwsze to masz problem z językiem programowania C++ nie mówiąc już o Qt.

Prościej i bezpieczniej byłoby skorzystać z QByteArray a nie char *.
Jeśli alokujesz pamięć na jeden znak to powinieneś sprawdzać czy socket->bytesAvailable(); rzeczywiście zwraca 1.

ui->textBrowser->setHtml(ui->textBrowser->toHtml() + text + ": " + bity );

powinno być np. tak: text[0] zamiast text, bo po adresem text zarezerwowałeś tylko jeden znak i przez to, że nie jest to '\0' (ASCII 0) powyższy kod przetwarzając wskaźnik text wypisuje śmieci z pamięci do napotkania '\0'.

0

Używam char* bo funkcja read właśnie tylko taką zmienną przyjmuje.
A kiedy wpisze text[0] zamiast text to:
cannot allocate an array of constant size 0

A że mam problemy z c++ to wiem, właśnie dlatego zapoznałem się z biblioteką Qt, kolega mi powiedział że dzięki temu nauczę się oop i c++ w praktyce.

0

Okey, już znalazłem sposób, przez przypadek, ale działa.
Po prostu zrobiłem tablice znaków, która zostaje wypełniana null`ami przed każdym pobraniem.

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