Примеры: Советник MetaTrader 4 обменивается информацией с внешним миром - страница 2

 
vadly67:
Создал эхо-сервер на MT4 и клиента (С++). Пересылка данных от клиента к серверу и обратно осуществляется правильно (строка), но на стороне MT4 не получается парсить строку - символы кодируются хангылем (корейский шрифт) и длина сроки символов   не соответствует посланной строке.

Дело в том, что вы скорее всего работаете на MT4 билд 600+. Терминал работает с юникодом, а данная библиотека, 'NetEventsProcDLL.dll' которая, работает с ascii. Соответственно, переданный массив воспринимается терминалом неверно. Для преобразования используйте функцию CharArrayToString.

Более подробно можно почитать тут: http://mqlmagazine.com/mql-programming/dll-hell-mql5-edition-unicode-vs-ansi/

Пример MQL-кода для EA в цикле по подключенным клиентам:

// declare and init array char requestArr[]; int REQUEST_SIZE = 1025; ArrayInitialize(requestArr, EMPTY_VALUE); int bufSize = REQUEST_SIZE; int readLen[1]; // get data s32_Error = ReadFromString(ph_Client[i], requestArr, bufSize, readLen); if (s32_Error != 0) { // your error handling code } if (readLen[0] == 0) { // no data } // convert acsii to unicode string request = CharArrayToString(requestArr, 0, WHOLE_ARRAY, CP_UTF8); // here we have request string in Unicode

 

Автору огромная благодарность да проделанную работу! Все работает отлично, буду использовать в своем проекте.

В проекты NetEventsProc и NetEventsProcDLL еще не вникал, но было бы очень круто уметь "пинговать" клиентов с сервера. А то сейчас, если клиент отвалился без вызова ConnectClose, сервер продолжает думать, что к нему еще подключен этот клиент.

 
Здраствуйте Я все сделал по инструкции чтоб сервер передавал значения индикатора клиенту Далее клиент конектится к серверу а потом пишет ошибку     ClientIndicator EURUSD,H1: SendToString(0,...) failed with error: WSA_INVALID_PARAMETER  Помогите пожалуйсто ато уже много чего перепробовал но ничего не получается я в С++ не силен
 
Mikhail Rudyk:
Здраствуйте Я все сделал по инструкции чтоб сервер передавал значения индикатора клиенту Далее клиент конектится к серверу а потом пишет ошибку     ClientIndicator EURUSD,H1: SendToString(0,...) failed with error: WSA_INVALID_PARAMETER  Помогите пожалуйсто ато уже много чего перепробовал но ничего не получается я в С++ не силен

У меня такая же проблема, если запускать ClientIndicator c ServerSendInd. Причина скорее всего в том, что хэндл подключения равен 0, поэтому попытка передать что-то заканчиваеться ошибкой WSA_INVALID_PARAMETER. До того как попробовать пример из статьи я сам написал сервер и клиент на mql. Клиент не может подключится к серверу, выдает ошибку 10051 WSAENETUNREACH A socket operation was attempted to an unreachable network. Правда иногда подключение типо происходит, ConnectTo возвращает 0, но хэндл тоже 0 и сервер не видит никаких подключений через GetAllConnections. При этом сам сервер успешно создаеться, это можно проверить если в командной строке прописать netstat -a. в списке появляеться подключение к указаному порту с состоянием LISENING. 

Кто-нибудь знает в чем дело?

 
Михаил:

У меня такая же проблема, если запускать ClientIndicator c ServerSendInd. Причина скорее всего в том, что хэндл подключения равен 0, поэтому попытка передать что-то заканчиваеться ошибкой WSA_INVALID_PARAMETER. До того как попробовать пример из статьи я сам написал сервер и клиент на mql. Клиент не может подключится к серверу, выдает ошибку 10051 WSAENETUNREACH A socket operation was attempted to an unreachable network. Правда иногда подключение типо происходит, ConnectTo возвращает 0, но хэндл тоже 0 и сервер не видит никаких подключений через GetAllConnections. При этом сам сервер успешно создаеться, это можно проверить если в командной строке прописать netstat -a. в списке появляеться подключение к указаному порту с состоянием LISENING. 

Кто-нибудь знает в чем дело?

Решение этой проблемы подано в англоязычном аналоге данной темы на форуме. 
 

Доброго времени суток! Для начала хочу выразить благодарность Автору за данную статью! Вы поистине гениальный человек!

Но я столкнулась со следующей проблемой:

Все примеры выполнила успешно.

Кроме последнего где передаются данные индикатора. Через локальный IP все работает безупречно! Но когда пытаюсь использовать глобальный IP то метатрейдер начинает жутко тормозить и в итоге выскакивает окошко, что  NetEventsProc.exe завершена, и метатрейдер тоже падает. Пробовала через 2000 порт, который у меня закрыт. Пробовала через 88 который открыт. Так же пробовала закидывать clientindicator на другой комп и с него коннектиться к этому компу. Там так же вылетает та же ошибка. Хэлп!

 

Благодарю 

 

Вы также связаться с авторами делать? Мне нужны некоторые настройки,

Дело не нужно начинать МТ4 клиент, подключиться к серверу, и считывает сделку, кто-то мне помочь?

Пожалуйста, свяжитесь со мной.

Причина обращения: