Zeromq: Wie der Zugriff auf tcp-Nachricht in c++
Ich bin ein neues zu ZeroMQ und meinen Weg durch die C++ - hello-world-Beispiel des echo-client-server-Muster (Request-Reply). Der server sieht wie folgt aus:
//
//Hello World server in C++
//Binds REP socket to tcp://*:5555
//Expects "Hello" from client, replies with "World"
//
#include <zmq.hpp>
#include <string>
#include <iostream>
#include <unistd.h>
int main () {
//Prepare our context and socket
zmq::context_t context (1);
zmq::socket_t socket (context, ZMQ_REP);
socket.bind ("tcp://*:5555");
while (true) {
zmq::message_t request;
//Wait for next request from client
socket.recv (&request);
std::cout << "Received Hello" << std::endl;
//Do some 'work'
sleep (1);
//Send reply back to client
zmq::message_t reply (5);
memcpy ((void *) reply.data (), "World", 5);
socket.send (reply);
}
return 0;
}
Nun meine Frage: Wie kann ich den Zugriff /Lesen Sie die realen Daten, die Buchse.recv() ? Versuch:
std::cout << request << std::endl;
führte zu einer Fehlermeldung:
error: no match for ‘operator<<’ in ‘std::operator<< [with _Traits =
std::char_traits<char>](((std::basic_ostream<char, std::char_traits<char> >&)
(& std::cout)), ((const char*)"Received Hello")) << request’
Das gleiche gilt für die client-Seite, die die Nachricht sendet. Ich nicht finden, eine Weg, um die wahre Botschaft...
- Ich glaube, der ZeroMQ Dokumentation-Beispiele in C++. Haben Sie schaute auf die?
- Du hast Recht, es ist ein Eintrag für zmq_msg_data, der sagt: "Die zmq_msg_data () - Funktion wird wieder ein Zeiger auf den Inhalt der Nachricht des message-Objekts verwiesen wird, die von msg." Aber wie mache ich das explizit?
- Nein, ich meine die Guide ist voll von C++ code-Beispiele.
- Ich lese die Anleitung, aber leider ist es nicht das, was ich Suche...
- hast du den guide gelesen ? Wenn Sie haben, dann würden Sie erkennen an den oben genannten code als aus dem Reiseführer. Dort sagt man einfach "empfangen Hallo", anstatt wirklich nach dem Lesen der Nachricht, die gesendet wurde. Ich habe tatsächlich kommen hier für die sehr gleiche Frage wie der OP.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem hello world Beispiel geht nur den halben Weg und Ausgänge der hart codierte Werte:
Drucken der aktuellen Reaktion kann wie folgt erledigt werden:
Es gibt einige andere Beispiele in zhelpers.hpp.
Fand ich, dass das folgende tut was ich will:
wo Sie für msglen ist vom Typ int und myMessage ist const char * tyoe.
Auf diese Weise erhält der server eine lesbare Nachricht.
Hoffe das ist nicht gegen irgendwelche zeromq Regeln...
Während ich denke, wir müssen gehen durch die Führung, bevor wir schreiben können elegante ZeroMQ-codes. Ich fand Zeilen einfach die codes aus den HALLO WELT Beispiel für das extrahieren von empfangenen Daten aus dem socket und sendet Antwort zurück:
Diese Lösung allerdings nicht angeben, die Länge der empfangenen Daten, folgende Nikolai Koudelia's Weg oben habe ich einen string für empfangene Daten: