Ich lese einen TCP-Stream mit Boost. Der Strom ist in diesem Format.Einen JSON-Stream mit boost :: asio lesen, vollständige Zeichenfolge abrufen?
"{\"animationValues\":{\"mouth_rightMouth_stretch\":0.0000000000000000,\"mouth_leftMouth_narrow\":0.00000000000000000,\"mouth_up\":0.0000000000000000,\"mouth_leftMouth_stretch\":0.0000000000000000,\"mouth_rightMouth_narrow\":0.00000000000000000,\"mouth_down\":0.00000000000000000,\"mouth_upperLip_left_up\":0.0000000000000000,\"mouth_upperLip_right_up\":0.0000000000000000,\"mouth_lowerLip_left_down\":0.0000000000000000,\"mouth_lowerLip_right_down\":0.0000000000000000,\"mouth_leftMouth_frown\":0.0000000000000000,\"mouth_rightMouth_frown\":0.0000000000000000,\"mouth_leftMouth_smile\":0.00000000000000000,\"mouth_rightMouth_smile\":0.00000000000000000,\"eyes_lookRight\":0.0000000000000000,\"eyes_lookLeft\":0.00000000000000000,\"eyes_lookDown\":0.0000000000000000,\"eyes_lookUp\":0.00000000000000000,\"eyes_leftEye_blink\":0.00000000000000000,\"eyes_rightEye_blink\":0.00000000000000000,\"eyes_leftEye_wide\":0.0000000000000000,\"eyes_rightEye_wide\":0.0000000000000000,\"brows_leftBrow_up\":0.0000000000000000,\"brows_leftBrow_down\":0.00000000000000000,\"brows_rightBrow_up\":0.0000000000000000,\"brows_rightBrow_down\":0.00000000000000000,\"brows_midBrows_up\":0.0000000000000000,\"brows_midBrows_down\":0.00000000000000000,\"jaw_open\":0.0000000000000000,\"jaw_left\":0.0000000000000000,\"jaw_right\":0.00000000000000000,\"mouth_phoneme_oo\":0.0000000000000000,\"mouth_right\":0.0000000000000000,\"mouth_left\":0.00000000000000000,\"mouth_phoneme_mbp\":0.0000000000000000,\"mouth_phoneme_ch\":0.0000000000000000},\"headRot\":[0.0,0.0, 0.0]}";
Ich versuche, diese zu lesen und jede Zeichenfolge zu analysieren, wie es kommt Also, was ich tun muß, um den Strom in Abschnitte aufgeteilt, die wie die oben schauen. Ich habe versucht:
boost::system::error_code error;
boost::asio::streambuf buffer;
boost::asio::read_until(sock, buffer, "]}"", error);
std::istream str(&buffer);
aber das gibt mir nur die Hälfte der Zeichenfolge, die ich brauche. Ich habe versucht:
boost::array<char, 2046> buf;
size_t len = sock.read_some(boost::asio::buffer(buf), error);
std::string data(buf.begin(), buf.end());
aber das gibt mir noch weniger. Wie kann ich jeweils einen Abschnitt des Streams lesen? Vielen Dank.
Haben Sie nach Fehlern gesucht? – sehe
Der Code wird kompiliert und ausgeführt. Es verbindet sich mit dem Socket und streamt Daten. Aber es ist immer nur ein Abschnitt der Saite, nicht das Ganze. – anti
Ich meinte, haben Sie den Wert von "Fehler" überprüft. Welches würde Fehler melden. – sehe