Aktywne Wpisy

MikSob1985 +8
Dobrej niedzieli Państwu życzę z Wydziału Nauk Społecznych Uniwersytetu Gdańskiego :)
Do zobaczenia 👋
📧 sobczakmikolaj85@wp.pl
💻 https://pl.wikipedia.org/wiki/Wikipedysta:Nicolauskas
Do zobaczenia 👋
📧 sobczakmikolaj85@wp.pl
💻 https://pl.wikipedia.org/wiki/Wikipedysta:Nicolauskas
źródło: scaled_1000090744
Pobierz
PodniebnyMurzyn +21
Ludzie czemu wy już nie śpicie




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) <<Mogę to zrobić z palca i wysyłać to z buta - w pętli for robić socket->write potem socket->flush int
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
QByteArray block; // tworzysz jakiś blok danych binarnych, ok
QDataStream sendStream(█, QIODevice::ReadWrite); // tworzysz data stream, który ma zapisywać do bloku w trybie
1.
void send(const std::vector* buffer) {2.
QByteArray block;3.
QDataStream sendStream(█, QIODevice::ReadWrite);4.
sendStream << quint16(0)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żQTCPSocketjest buforowany.@Khaine: Masz tutaj przykład:
https://gist.github.com/ArpegiusWhooves/117f867dde9696d5e6b0