0

C++ のサーバーと C# クライアントの 2 つのアプリケーションを通信する必要があります。

サーバーで 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);

  }

これは、実装してから拡張しようとしている送信と応答の簡単な例です。

4

1 に答える 1

1

コードの問題:

  • ZeroMQ の PAIR ソケットは、インプロセス トランスポートとのスレッド間通信用です。tcp では使用しないでください。
  • .Net 側では、PAIR と互換性のない REQ ソケットを使用しています。

C++ で ZMQ_REP ソケットに切り替えると、問題が解決するはずです。ソケット タイプに関する詳細なドキュメントは次のとおりです。ZMQ ガイドには、これらのソケット上に構築された通信パターンに関する非常に優れた説明があります。

于 2016-09-07T08:57:43.170 に答える