0MQ和NetMQ之间的通信

时间:2016-09-07 07:05:51

标签: c# c++ sockets zeromq netmq

我需要传达两个应用程序,一个用C ++服务器和一个c#客户端。

我试图在服务器和绑定器C#NetMq上使用0MQ。 我可以从客户端进行连接,并从客户端向服务器发送消息,但不发送消息。客户端等待并且不接收服务器的发送。

一些例子?

服务器:

try
{
zmq::context_t context (1);
zmq::socket_t socket(context, ZMQ_PAIR);
socket.bind ("tcp://*:5556");
zmq::message_t request;
// just once
for(;;)
{
    zmq::message_t request;
    socket.recv (&request);
    std::cout << "Received" << std::endl;   
    std::string msg_str(static_cast<char*>(request.data()), request.size());    
    std::cout << msg_str << std::endl;

    zmq::message_t reply (5);
    memcpy (reply.data (), "Hello", 5);
    boost::this_thread::sleep_for(boost::chrono::milliseconds(2000));
    socket.send(reply);
}

客户端:

 using (var requestSocket = new RequestSocket(">tcp://192.168.70.150:5556"))
 {
     Console.WriteLine("requestSocket : Sending 'Hello'");
     requestSocket.SendFrame("Hello");

     var message = requestSocket.ReceiveFrameString();

    Console.WriteLine(message);

  }

这是我尝试实施然后扩展的发送和响应的一个简单示例。

1 个答案:

答案 0 :(得分:1)

代码问题:

  • ZeroMQ中的PAIR套接字用于与inproc进行线程间通信 运输,你不应该使用tcp
  • 在.Net方面,您使用的REQ套接字与PAIR不兼容

切换到C ++上的ZMQ_REP套接字应该可以解决您的问题。 gather instructions有关套接字类型的详细文档,Here对这些套接字上构建的通信模式有很好的描述。