c # — Связь между 0MQ и NetMQ

У меня есть необходимость общаться два приложения, один сервер на 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);

}

Это тривиальный пример отправки и ответа, который я пытаюсь реализовать, а затем расширить.

0

Решение

Проблемы с кодом:

  • PAIR-сокеты в ZeroMQ предназначены для связи между потоками с inproc
    транспорт, вы не должны использовать их с TCP
  • На стороне .Net вы используете разъем REQ, который не совместим с PAIR

Переход на сокет ZMQ_REP на C ++ должен решить вашу проблему. Вотподробная документация по типам розеток Руководство ZMQ имеет очень хорошее описание коммуникационных шаблонов, построенных на этих сокетах.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]