【问题标题】:Comunication between 0MQ and NetMQ0MQ和NetMQ之间的通信
【发布时间】:2016-09-07 07:05:51
【问题描述】:

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

我正在尝试在服务器上使用 0MQ 和 binder C# NetMq 。 我可以从客户端进行连接并将消息从客户端发送到服务器,但不能从另一个发送。客户端等待,并没有收到服务端的发送。

一些例子?

服务器:

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);

  }

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

【问题讨论】:

    标签: c# c++ sockets zeromq netmq


    【解决方案1】:

    代码问题:

    • ZeroMQ 中的 PAIR 套接字用于与 inproc 进行线程间通信 传输,您不应该将它们与 tcp 一起使用
    • 在 .Net 端,您使用的是与 PAIR 不兼容的 REQ 套接字

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-11
      • 2014-07-22
      • 2011-08-23
      • 2017-08-13
      • 2013-10-18
      • 2011-08-08
      • 2020-12-10
      • 2011-01-25
      相关资源
      最近更新 更多