2016-09-07 12 views
0

Ich habe die Notwendigkeit, zwei Anwendungen zu kommunizieren, einen Server in C++ und einen C# -Client.Kommunikation zwischen 0MQ und NetMQ

Ich versuche 0MQ auf dem Server und dem Bindemittel C# NetMq zu verwenden. Ich kann die Verbindung vom Client herstellen und eine Nachricht vom Client an den Server senden, aber nicht die andere. Der Client wartet und empfängt das Senden vom Server nicht.

Einige Beispiele?

Server:

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

Auftraggeber:

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

    } 

Dies ist ein triviales Beispiel zu senden und Antwort, dass ich versuche zu erweitern zu implementieren und dann.

Antwort

1

Probleme mit dem Code:

  • PAIR-Buchsen in ZeroMQ sind für inter-thread Kommunikation mit inproc Transport sollte man sie nicht mit tcp verwenden
  • auf der .NET-Seite Sie verwenden REQ-Buchse, die nicht mit PAIR

Switching auf ZMQ_REP-Socket auf der C++ sollte Ihr Problem lösen..ist die detaillierte Dokumentation über Socket-Typen, die ZMQ Guide hat sehr gute Beschreibung der Kommunikation Muster auf diesen Sockeln gebaut.