Zeromq:如何在c++; 我是一个新的ZeloMQ,并通过C++ HELLO World的Eclipse客户服务器模式(请求回复)的例子。服务器看起来像: // // 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; } // /C++中的World World Server //将REP套接字绑定到tcp://*:5555 //需要客户端的“你好”,回复为“世界” // #包括 #包括 #包括 #包括 int main(){ //准备上下文和套接字 zmq::context\u t context(1); 套接字(上下文,zmq_代表); socket.bind(“tcp://*:5555”); while(true){ zmq::消息请求; //等待客户端的下一个请求 socket.recv(&请求); std::cout

Zeromq:如何在c++; 我是一个新的ZeloMQ,并通过C++ HELLO World的Eclipse客户服务器模式(请求回复)的例子。服务器看起来像: // // 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; } // /C++中的World World Server //将REP套接字绑定到tcp://*:5555 //需要客户端的“你好”,回复为“世界” // #包括 #包括 #包括 #包括 int main(){ //准备上下文和套接字 zmq::context\u t context(1); 套接字(上下文,zmq_代表); socket.bind(“tcp://*:5555”); while(true){ zmq::消息请求; //等待客户端的下一个请求 socket.recv(&请求); std::cout,c++,tcp,zeromq,C++,Tcp,Zeromq,hello world示例只进行了一半,并输出硬编码值: std::cout << "Received Hello" << std::endl; std::cout我发现以下内容符合我的要求: zmq::message_t request (msglen); memcpy ( (void *) request.data(), myMessage, msglen); char * requestmsg = new char [msglen]; memcpy (reques

hello world示例只进行了一半,并输出硬编码值:

std::cout << "Received Hello" << std::endl;

std::cout我发现以下内容符合我的要求:

zmq::message_t request (msglen);
memcpy ( (void *) request.data(), myMessage, msglen);
char * requestmsg = new char [msglen];
memcpy (requestmsg, request.data(), request.size());
requestsocket.send (request);
std::cout << "Sending " <<  requestmsg << std::endl;
zmq::消息请求(msglen);
memcpy((void*)request.data(),myMessage,msglen);
char*requestmsg=新字符[msglen];
memcpy(requestmsg,request.data(),request.size());
requestsocket.send(请求);

std::cout而我认为在编写优雅的ZeroMQ代码之前,我们需要阅读指南。我从HELLO WORLD示例中找到了几行简单的代码,用于提取从套接字接收的数据并发送回响应:

    zmq::message_t request;
    socket.recv (&request);
    std::cout << "Received request: [" << (char*) request.data() << "]" << std::endl;
    //  Do some 'work'
    Sleep (1);
    //  Send reply back to client
    zmq::message_t reply (6);
    memcpy ((void *) reply.data (), "World", 6);
    socket.send (reply);
zmq::消息请求;
socket.recv(&请求);

STD::我相信ZrOMQ文档中有C++的例子。你看过了吗?你说的没错,ZMQJMSGYDATA数据有一个条目:“ZMQJMSGYDATA()函数应该返回一个指向MSG引用的消息对象的消息内容的指针。”但我是如何明确地做这件事的?不,我是指全是C++代码示例。我读了指南,但不幸的是它不包括我正在寻找的……iARSKS你读过指南吗?如果你有,那么你会认识到上面的代码是从指南。在那里他们只说“收到你好”。实际上,我来这里不是为了阅读发送的消息,而是为了一个与OP完全相同的问题。Nice first answer@NikolaiKoudelia。你是使用zmq的c绑定(cppzmq)还是没有任何绑定的zmq?是的,绑定(zmq.hpp)这是非常必要的,非常奇妙的反应。这真的应该包含在Hello World例子中。既然你在C++中为什么不使用字符串?我的意思是char *只是一个痛苦,除非你真的需要一些模糊的原因(例如其他库)。
zmq::message_t reply;
socket.recv (&reply);

std::string rpl = std::string(static_cast<char*>(reply.data()), reply.size());

std::cout << rpl << std::endl;
zmq::message_t request (msglen);
memcpy ( (void *) request.data(), myMessage, msglen);
char * requestmsg = new char [msglen];
memcpy (requestmsg, request.data(), request.size());
requestsocket.send (request);
std::cout << "Sending " <<  requestmsg << std::endl;
    zmq::message_t request;
    socket.recv (&request);
    std::cout << "Received request: [" << (char*) request.data() << "]" << std::endl;
    //  Do some 'work'
    Sleep (1);
    //  Send reply back to client
    zmq::message_t reply (6);
    memcpy ((void *) reply.data (), "World", 6);
    socket.send (reply);
 std::cout << "Received request: [" << std::string(static_cast<char*>(request.data()), request.size())  << "]" << std::endl;