Aktywne Wpisy
panthererose +7
Mirki, ile u Was kosztuje wymiana opon i skąd jesteście? Bo z sezonu na sezon jest coraz drożej. Z letnich na zimowe płaciłam 120, a teraz z zimowych na letnie 130 - obwarzanek warszawski.
#wulkanizacja #opony #wymiana
#wulkanizacja #opony #wymiana
WielkiNos +203
Wiedzieliście, że są ludzie, którzy robiąc sobie dzieci oczekują od nich opieki na starość?
Skazując własne dziecka na taki los każe mu się rezygnować z własnego życia żeby poświęciło je podcieraniu nam odbytu podczas gdy są domy opieki. Pierwsze do demonizowania takich miejsc są osoby, które zapewne osobiście się starymi ludźmi opiekować nie będą.
#dzieci #starosc #bekazpodludzi #antynatalizm #logikaniebieskichpaskow
Skazując własne dziecka na taki los każe mu się rezygnować z własnego życia żeby poświęciło je podcieraniu nam odbytu podczas gdy są domy opieki. Pierwsze do demonizowania takich miejsc są osoby, które zapewne osobiście się starymi ludźmi opiekować nie będą.
#dzieci #starosc #bekazpodludzi #antynatalizm #logikaniebieskichpaskow
Aktywne Znaleziska
Zawiera treści 18+
Ta treść została oznaczona jako materiał kontrowersyjny lub dla dorosłych.
Mirki, orientujecie się może jak i czy się da w ogóle wysłać przez QTcpSocket wektor danych? Ogółem obiekt? W sensie daję mu wektor który ma 100 intów czy czegokolwiek i mu mówię, żeby mi go po prostu wysłał taki jaki jest a ktoś po stronie klienta spodziewa się tego wektora o takim rozmiarze? Czy muszę mu serializować to i odczytywać po prostu tego inta jednego za drugim i po drugiej stronie też łapać jednego inta na raz?
Komentarz usunięty przez autora
QByteArray block;
QDataStream sendStream(█, QIODevice::ReadWrite);
sendStream << quint16(0) << str;
sendStream.device()->seek(0);
sendStream << (quint16)(block.size() - sizeof(quint16));
tcpSocket->write(block);
Mogę to zrobić z palca i wysyłać to z buta - w pętli for robić socket->write potem socket->flush int za
Lepiej serializować, ale jeżeli już musisz (jeżeli to np są sample i ważna jest latencja) to w QDataStream masz writeBytes i wrzucasz
writeBytes( reinterpret_cast(wektor.data()), wektor.size() * sizeof( decltype(wektor)::value_type ) )
1. Transmisja po TCP odbywa się porcjami, i druga strona musi cały przekaz sobie "poskładać" - dlatego aby to było możliwe podałem Ci wyżej prosty sposób: najpierw wysyłasz ilość przesyłanych danych, a dopiero potem same dane binarne.
2. W std::vector jest możliwy bezpośredni dostęp do poszczególnych elementów sekwencyjnie, nawet z wykorzystaniem arytmetyki wskaźników. link, dysponując więc wskaźnikiem na pierwszy element wektora (metoda data()) masz dostęp w zasadzie do kolejnych
QByteArray block; // tworzysz jakiś blok danych binarnych, ok
QDataStream sendStream(█, QIODevice::ReadWrite); // tworzysz data stream, który ma zapisywać do bloku w trybie obustronnym
sendStream << quint16(0) << str; // wg. dokumentacji zamiast (0) powinna być chyba liczba, którą chcę tam dodać, nie? Więc musiałbym zrobić fora i element po elemencie wektora w ten sposób wrzucać zdaje się. Czym jest str?
sendStream.device()->seek(0);
1.
void send(const std::vector* buffer) {
2.
QByteArray block;
3.
QDataStream sendStream(█, QIODevice::ReadWrite);
4.
sendStream << quint16(0) << buffer->data();
5.
sendStream.device()->seek(0);
6.
sendStream << (quint16)(block.size() - sizeof(quint16));
7.
tcpSocket->write(block);
}
block - ciąg bajtów na dane do wysyłki skojarzone ze strumieniem (linia 2 i 3)
wysłanie do strumienia: 0, a następnie ciągu intów
Tylko teraz pytanie - jak z odczytem tego? Chcę to wpisać do wektora potem mając byte array. No po prostu rekonstrukcja.
Robisz rekonstrukcje w slocie podpiętym pod sygnał readyRead klasy QTcpSocket.
Wykorzystujesz QDataStream aby odczytać najpierw wartość przesłanych danych, a następnie te dane do QByteArray.
Na zakończenie odbudowujesz sobie std::vector z QByteArray
QByteArray
, ponieważQTCPSocket
jest buforowany.@Khaine: Masz tutaj przykład:
https://gist.github.com/ArpegiusWhooves/117f867dde9696d5e6b0