0MQ与NetMQ之间的通信

Communication between 0MQ and NetMQ

本文关键字:通信 之间 NetMQ 0MQ      更新时间:2023-10-16

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

我正试图在服务器上使用0MQ和绑定器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);
  }

这是一个微不足道的发送和响应的例子,我试图实现,然后扩展。

代码问题:

    ZeroMQ中的
  • PAIR套接字用于与inproc进行线程间通信你不应该在tcp
  • 中使用它们
  • 在。net端,你正在使用REQ套接字,这与PAIR不兼容
在c++上切换到ZMQ_REP套接字应该可以解决您的问题。这里有关于套接字类型的详细文档,ZMQ指南对建立在这些套接字上的通信模式有很好的描述。