A biblioteca (winhttp.dll) não expõe nenhuma função para pings ou pongs. Embora a documentação se refira a uma opção de configuração que rege como a conexão é mantida viva. Acredito que a biblioteca envia os pings automaticamente quando uma conexão está ociosa.
#include<websocket.mqh> #include<JAson.mqh> #define BINANCE_URL "fstream.binance.com:443/ws" CWebsocket websocket; //websocket client CJAVal m_jv; //utility json object //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- create timer EventSetTimer(1); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy timer EventKillTimer(); } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { if(!websocket.Connect(BINANCE_URL)) { Print(websocket.LastErrorMessage()," : ",websocket.LastError()); return; } else { Print("Connected"); } } //+------------------------------------------------------------------+
Estou apenas tentando verificar se ele se conecta, mas está dando erro na conexão
Erro: Win32 Erro API 6 : 6
Alguma idéia do porquê de seu lançamento do erro?
Obrigado
Erro: Win32 Erro API 6 : 6
Alguma idéia do porquê de seu lançamento do erro?
Obrigado
Estou tendo o mesmo problema no mql5 quando usado para conectar a um host local 127.0.0.0.1 . Entretanto, quando tentei usá-lo no mql4, funcionou normalmente !!!!.
Também há um problema no uso do WinHttpSocketReceive() no evento OnTimer . ele simplesmente causa o congelamento do terminal .
Eu construí meu próprio servidor WS usando o nodeJS Express e a biblioteca WS, e consegui enviar para o servidor e receber do servidor quando adicionei a função Receive no gerenciador de eventos onClick , isto é por causa do fato de que winhttp.sll::WinHttpSocketReceive() funciona de forma assíncrona
o que significa que ele não retorna até receber alguns dados do servidor . Portanto, usá-lo diretamente no onTimer() sem ter o servidor para enviar dados bloqueará a linha para sempre e fará com que o terminal congele.
Então o WinHttpSocketReceive() funciona bem quando há um dado do servidor . Mas por outro lado, quando a mesma função é usada dentro do OnTimer(), o gerenciador de eventos congela o terminal. Alguém tem uma pista de como evitar isso?
É um método/função de "bloqueio", nada a ser corrigido aqui.
Sim, eu sei que é uma função síncrona que bloqueia o fio, no entanto fui capaz de gerenciá-lo de forma assíncrona adicionando o WINHTTP_FLAG_ASYNC à função WinnHttpOpen() e ele não bloqueia o resto do código, no entanto enfrentei outro problema que surgiu ao adicionar WINHTTP_FLAG_ASYNC que é de acordo com a msdn , temos que usar o WinHttpSetStatusCallBack() o que leva o ponteiro a uma função de Call back que recebe os resultados .
Eu usei typedef para definir o ponteiro para a função desta maneira
typedef void(*WINHTTP_STATUS_CALLBACK)(HINTERNET,DWORD&,DWORD,BYTE &[],DWORD);
então eu importei o WinHttpSetStatusCallBack() da winhttp.dll de acordo com a msdn
https://docs.microsoft.com/en-us/windows/win32/api/winhttp/nf-winhttp-winhttpsetstatuscallback
#import WINHTTP_STATUS_CALLBACK WinHttpSetStatusCallback(HINTERNET hInternet,WINHTTP_STATUS_CALLBACK lpfnInternetCallback,DWORD dwNotificationFlags,DWORD &dwReserved); #import
aqui vem o maior problema que parece insolúvel devido ao mql . quando compenso recebo uma mensagem de erro de que as indicações não são permitidas na declaração de importação .!!!!!! então não há como passar a chamada de volta para esta função, bem como retornar o ponteiro para essa função . qualquer idéia ???

- 2021.10.13
- stevewhims
- docs.microsoft.com
Eu usei typedef para definir o ponteiro para a função desta maneira
então eu importei o WinHttpSetStatusCallBack() da winhttp.dll de acordo com a msdn
Sim, boa tentativa :)
Eu também esperava que isso fosse possível, mas se você pesquisar no fórum, verá que a função no MQL é um cabo, não um endereço de memória, o que é exigido pelo "C/C++" calllback-API.
Talvez um dia a MQL acrescentaria o "real" Ponteiro de Função.
Sim, boa tentativa :)
Eu também esperava que isso fosse possível, mas se você pesquisar no fórum, verá que a função no MQL é um cabo, não um endereço de memória, o que é exigido pelo "C/C++" calllback-API.
Talvez um dia a MQL acrescentaria o "real" Ponteiro de Função.
Sim, espero que em breve isto seja suportado nativamente.
@Francis Dube É possível criar um serviço MQL5 que atua como servidor WebSocket? Você tem alguns exemplos?

- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo WebSocket para o MetaTrader 5: Usando a API do Windows foi publicado:
Neste artigo vamos usar WinHttp.dll com o intuito de criar um cliente WebSocket para os programas MetaTrader 5. Em última instância, o cliente deve ser implementado como uma classe e testado em interação com o WebSocket API da Binary.com.
Autor: Francis Dube