Проблемы с zmq_bind() в привязке ZeroMQ для языка MQL4

Я работаю над MT4 и использую оболочку mql4zmq.dll, как указано в ссылке.

https://github.com/AustenConrad/mql4zmq

Поскольку я выполнил все инструкции и успешно загрузил DLL, а также lib файл в определенные места из предварительно скомпилированного. Но он не может bind или connect с сокетом через zmq_connect(,) или zmq_bind(,). Пожалуйста, помогите мне решить эту проблему. Я размещаю свой код здесь

// Include the libzmq.dll abstraction wrapper.
#include <mql4zmq.mqh>

//+------------------------------------------------------------------+
//| variable definitions                                             |
//+------------------------------------------------------------------+
int speaker,listener,contextt;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   int major[1];int minor[1];int patch[1];
   zmq_version(major,minor,patch);
   Print("Using zeromq version " + major[0] + "." + minor[0] + "." + patch[0]);

   Print(ping("Hello World"));

   Print("NOTE: to use the precompiled libraries you will need to have the Microsoft Visual C++ 2010 Redistributable Package installed. To Download: http://www.microsoft.com/download/en/details.aspx?id=5555");

   contextt = zmq_init(1);
   speaker = zmq_socket(contextt, ZMQ_PUB);
   listener = zmq_socket(contextt, ZMQ_SUB);

   // Subscribe to the command channel (i.e. "cmd").  
   // NOTE: to subscribe to multiple channels call zmq_setsockopt multiple times.
   zmq_setsockopt(listener, ZMQ_SUBSCRIBE, ""); 

   if (zmq_bind(speaker,"tcp://127.0.0.1:5555") == -1) 
   {
      Print("Error binding the speaker!");
      return(-1);  
   } 

Есть проблема в

if ( zmq_bind( speaker, "tcp://127.0.0.1:5555" ) == -1 )

Он возвращает -1, а не bind.

Я пробовал все возможное, чтобы разгадать эту загадку, но потерпел неудачу.

Пожалуйста, дайте мне знать, если я ошибаюсь!!!


person Junaid    schedule 12.03.2015    source источник
comment
Да, @Junaid, Остин сделал отличную оболочку для кодеров MQL4. Ваш первоначальный опыт может показаться хлопотным, тем не менее, интеграция ZeroMQ / MQL4 работает отлично и приносит бесчисленное количество мощных расширений в домен MQL4. Не могли бы вы подробнее рассказать о своей тестовой настройке? Что такое выходные данные, преобразованные с помощью Print() в .log? Что вы пробовали, чтобы проверить истинный PointOfFailure? На какой ОС вы работаете? (применяются привилегии порта / правила и исключения брандмауэра ...) и т. д. Было бы здорово иметь возможность добиться своей цели. MQL4/ZMQ классные и такие, такие, такие мощные...   -  person user3666197    schedule 15.03.2015
comment
Я разгадал эту загадку и смог связать, а также подключиться с помощью класса-оболочки Austen. На самом деле мой порт, связанный с IP-адресом, не был закрыт должным образом и требует его освобождения позже. Спасибо за поддержку   -  person Junaid    schedule 17.03.2015
comment
полезно знать и наслаждаться мощными мирами обмена сообщениями ZeroMQ, Джунаид   -  person user3666197    schedule 18.03.2015
comment
@Junaid, у меня такая же проблема, не могли бы вы рассказать мне, как вы ее исправили? что вы подразумеваете под портом, связанным с IP-адресом, не был закрыт должным образом и требует его освобождения позже   -  person Roledenez    schedule 27.07.2016


Ответы (1)


Да, address/port при использовании может блокировать .bind() / .connect()

Как решено в комментариях выше, есть другое сообщение с аналогичным решением той же основной причины, почему правильно сформированный ZeroMQ -code все еще не смог .bind()

Освобождение/повторное использование адресов/портов — это проблема управления ресурсами, зависящая от операционной системы. Будьте осторожны при разработке для операций производственного уровня.

person user3666197    schedule 17.09.2015