C++ 数据类型之间的zeromq转换

C++ 数据类型之间的zeromq转换,c++,c++11,zeromq,C++,C++11,Zeromq,您好,我正在尝试理解和学习如何使用ZeroMQ,虽然这可能是最基本的,但我没有找到解决方法。在这段代码中,我试图创建一个服务器,将消息从一个客户端转发到另一个客户端。服务器编译得很好,但存在一些主要问题(几乎所有问题都与数据类型有关),因此我甚至无法测试我的服务器 server.cpp: #include "zmq.hpp" #include <string> #include <iostream> #include <unistd.h> int ma

您好,我正在尝试理解和学习如何使用ZeroMQ,虽然这可能是最基本的,但我没有找到解决方法。在这段代码中,我试图创建一个服务器,将消息从一个客户端转发到另一个客户端。服务器编译得很好,但存在一些主要问题(几乎所有问题都与数据类型有关),因此我甚至无法测试我的服务器

server.cpp:

#include "zmq.hpp"
#include <string>
#include <iostream>
#include <unistd.h>    
int main ()
{
    zmq::message_t board (9);
    zmq::context_t context (1);
    zmq::socket_t socket1 (context, ZMQ_REP);
    socket1.bind ("tcp://*:20000");
    zmq::socket_t socket2 (context, ZMQ_REP);
    socket1.bind ("tcp://*:20001");
    int jogo=9;
    while (jogo)
    {
        zmq::message_t request;
        if (jogo%2!=0)
        {
            socket1.recv (&request);
            memcpy ((void *) board.data (), request.data(), 9);
            socket2.send (board);
        }
        else
        {
            socket2.recv (&request);
            memcpy ((void *) board.data (), request.data(), 9);
            socket1.send (board);
        }
        --jogo;
    }
    return 0;
}
#包括“zmq.hpp”
#包括
#包括
#包括
int main()
{
zmq::留言板(9);
zmq::context\u t context(1);
zmq::socket_t socket1(上下文,zmq_代表);
socket1.bind(“tcp://*:20000”);
zmq::socket_t socket2(上下文,zmq_代表);
socket1.bind(“tcp://*:20001”);
int jogo=9;
while(jogo)
{
zmq::消息请求;
如果(jogo%2!=0)
{
socket1.recv(&request);
memcpy((void*)board.data(),request.data(),9);
socket2.send(板);
}
其他的
{
socket2.recv(和请求);
memcpy((void*)board.data(),request.data(),9);
socket1.send(板);
}
--乔戈;
}
返回0;
}
jogo_客户端.cpp

#include "zmq.hpp"
#include <string>
#include <iostream>

int main ()
{
    int player,port=20000,jogo=9,ganhou=0;
    std::string game;
    std::cin >> player;
    port+=player;
    zmq::context_t context (1);
    zmq::socket_t socket (context, ZMQ_REQ);
    std::cout << "Connecting to game server…" << std::endl;
    //-std=gnu++11
    socket.connect (std::string("tcp://localhost:")+std::to_string(port)); 
    zmq::message_t board (9);
    if(player)
    {
        while(jogo)
        {
            if (jogo%2!=0)
            {
                memcpy ((void *) board.data (), "Hi from 1", 9);
                std::cout << "Sending Hi" << std::endl;
                socket.send (board);
            }
            else
            {
                socket.recv (&board);
                memcpy ((void *) ,game, request.data (), 9);
                std::cout << "Got from 2: " << std::endl;
                std::cout << game << std::endl;
            }
            --jogo;
        }
    }
    else
    {
        while(jogo)
        {
            if (jogo%2!=0)
            {
                socket.recv (&board);
                memcpy ((void *) ,game, request.data (), 9);
                std::cout << "Getting from 2 " << std::endl;
                std::cout << game << std::endl;
            }
            else
            {
                emcpy ((void *) board.data (), "Hi from 2", 9);
                std::cout << "Sending Hi" << std::endl;
                socket.send (board);
            }
            --jogo;
        }
    }
 return 0;
}
#包括“zmq.hpp”
#包括
#包括
int main()
{
int播放器,端口=20000,jogo=9,ganhou=0;
字符串游戏;
std::cin>>播放器;
端口+=播放器;
zmq::context\u t context(1);
套接字(上下文,zmq_-REQ);

std::cout这很旧,但是你有什么版本的cppzmq?看看
/usr/include/zmq.hpp
我看到
zmq::socket\u t::connect(std::string cont&)
。当然,你在第29行有一个明显的编码错误,所以所有的赌注都没有了。
jogo_client.cpp: In function ‘int main()’:
jogo_client.cpp:14:73: error: no matching function for call to ‘zmq::socket_t::connect(std::basic_string<char>)’
jogo_client.cpp:14:73: note: candidate is:
In file included from jogo_client.cpp:1:0:
zmq.hpp:384:21: note: void zmq::socket_t::connect(const char*)
zmq.hpp:384:21: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘const char*’
jogo_client.cpp:29:26: error: expected primary-expression before ‘void’
jogo_client.cpp:29:26: error: expected ‘)’ before ‘void’
jogo_client.cpp:43:26: error: expected primary-expression before ‘void’
jogo_client.cpp:43:26: error: expected ‘)’ before ‘void’