Discussão do artigo "Trabalhando Com Soquetes em MQL, ou como se tornar um provedor de sinal" - página 5

 
pavlick_:

Eu tenho um cliente TCP síncrono:

Não preciso de um servidor no µl, portanto, apenas um cliente. Testado superficialmente.

ZЫЫ: Obrigado pelo artigo.

No estágio de compilação, ele falha nas conversões de estrutura :-(.

'cannnot cast Data_cz_char -> Data_cz_int ' e vice-versa.

Embora parecesse funcionar antes. Parece que parou de funcionar depois de outra atualização do terminal.

Qual é o problema? Não estou entendendo.

 
Dmitriy Strelnikov:

Qual é o problema? Não entendo.

união
 
o_o:
união


Obrigado por sua resposta. No entanto, a pergunta ainda é relevante. A MQL4 não oferece suporte a uniões. Pelo menos é o que diz o documento.

Além disso, enquanto eu estava investigando, surgiram mais algumas perguntas:

- Nos procedimentos send e recv, o parâmetro int flags (o último) não é coberto de forma alguma. No meu caso, com o send, ele assume o valor - 0, e no recv - 8. Por quê?

- A publicação original diz que o cliente é síncrono, mas o exemplo implementa apenas o envio de uma cadeia de caracteres para o servidor. E quanto à resposta ... .

Perdoe-me por minhas perguntas de manequim. Estou tentando entender, mas ainda não estou conseguindo... se puder me ajudar, por favor.

Quero implementar uma classe de trabalho para interação com um servidor de terceiros de muitos clientes. Infelizmente, ainda estou preso.

 
Dmitriy Strelnikov:


Obrigado pela resposta. No entanto, a pergunta ainda é relevante. A MQL4 não é compatível com uniões. Pelo menos é o que diz o documento.

Além disso, enquanto eu estava investigando, surgiram mais algumas perguntas:

- Nos procedimentos send e recv, o parâmetro int flags (o último) não é coberto de forma alguma. No meu caso, com o send, ele assume o valor - 0, e no recv - 8. Por quê?

- A publicação original diz que o cliente é síncrono, mas o exemplo implementa apenas o envio de uma cadeia de caracteres para o servidor. E quanto à resposta ... .

Perdoe-me por minhas perguntas de manequim. Estou tentando entender, mas ainda não estou conseguindo... se puder me ajudar, por favor.

Quero implementar uma classe de trabalho para interação com um servidor de terceiros de muitos clientes. Infelizmente, ainda estou preso.

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Alterações de quebra de código na linguagem MQL4

Alain Verleyen, 2017.05.18 22:10


Eles introduziram a união (não documentada no MT4, mas funciona bem com o ME 1599):

union Udata_32bytes 
  {
   uchar             d_uchar[32];
   ulong             d_ulong[4];
  }
data;

void OnStart()
  {
   data.d_ulong[0]=0xFFEEDDCC;
   
   printf("uchar[%i] = %X",1,data.d_uchar[1]);

  }

 
Alain Verleyen:


SIM! As associações estão funcionando. OBRIGADO!!! Entendo que o suporte a sindicatos foi adicionado a partir de 12 de maio de 2017. Ótimo!

Seria bom que os desenvolvedores refletissem isso no documento.

Um exemplo simples que ilustra o trabalho com a união

//+------------------------------------------------------------------+
//| Função de início do programa de script|
//+------------------------------------------------------------------+

union AS {
   uint intN;
   uchar c[4];
} a;

void OnStart()
  {
//---
   a.intN = 555; 
   
   // uint - 4 bytes 
   // uchar[4] - uma matriz de 4 elementos de um byte cada
   // 555 decimal, isso é 0000 0000 0000 0010 1011 binário de 4 bytes.
   // respectivamente, essa é uma matriz de 4 dígitos decimais 0 0 0 2 43 

   Alert(IntegerToString(a.intN) + ", byte a byte " + IntegerToString(a.c[0]) + ", " + IntegerToString(a.c[1]) + ", " + IntegerToString(a.c[2]) + ", " + IntegerToString(a.c[3]));
  }
 
 
Dmitriy Strelnikov:

- Nos procedimentos send e recv, o parâmetro int flags (o último) não é coberto de forma alguma. No caso do send, ele assume o valor 0, mas no recv ele assume o valor 8. Por quê?

Porque você está inventando coisas. Não vejo flags =8.

- A postagem original diz que o cliente é síncrono, e o exemplo implementa apenas o envio de uma cadeia de caracteres para o servidor. E quanto à resposta ... .

Com essas formulações de perguntas, é melhor abordar aqui
 
o_o:

Porque você está inventando. Não vejo nenhuma bandeira =8

Com esse tipo de formulação de perguntas, é melhor abordar aqui.


Prezado GURU! Não tenho o hábito de inventar coisas. Meu erro, aparentemente, foi que as perguntas foram dirigidas ao usuário com o apelido pavlick_ e diziam respeito à classe TCP_Client implementada por ele e apresentada neste tópico acima - https://www.mql5.com/ru/forum/91150/page3#comment_2798881.

Portanto, peço desculpas pelo transtorno. No entanto, eu não esperava uma reação tão tempestuosa, para não dizer mais, de sua parte.

Acredite em mim, às vezes é útil conter suas emoções negativas.

Обсуждение статьи "Работа с сокетами в MQL, или Как стать провайдером сигналов"
Обсуждение статьи "Работа с сокетами в MQL, или Как стать провайдером сигналов"
  • 2016.09.08
  • www.mql5.com
Опубликована статья Работа с сокетами в MQL, или Как стать провайдером сигналов: Автор: o_O Версии библиотеки 1...
 

Idem! Idem à pergunta!

 
MetaQuotes Software Corp.:

Foi publicado o novo artigo Trabalhando com soquetes em MQL, ou Como se tornar um provedor de sinal:

Autor: o_O


Olá, esse código funciona em MQL4?

Estou tentando portá-lo para o MQL4, e quando a função DLL bind() é chamada na função MQL StartServer, aparece a mensagem abaixo:

2017.09.13 18:06:30.181 Server AUDCAD,H1: try bind...0.0.0.0:8081
2017.09.13 18:06:30.181 Access violation read to 0x00000012 in 'Ws2_32.dll'


 
Wemerson Guimaraes:

Olá, este código funciona em MQL4?

O código-fonte foi compilado para x64

você precisa alterar todos os ponteiros para 32 bits

por exemplo, usar SOCKET32 em vez de SOCKET64 etc.