Discusión sobre el artículo "Trabajando con sockets en MQL, o Cómo convertirse en proveedor de señales" - página 5

 
pavlick_:

Tengo un cliente TCP síncrono:

No necesito un servidor en µl, así que sólo un cliente. Probado superficialmente.

ZЫЫ: Gracias por el artículo.

En la fase de compilación, falla en las conversiones de estructuras :-(.

'cannnot cast Data_cz_char -> Data_cz_int ' y viceversa.

Aunque antes parecía funcionar. Parece que ha dejado de funcionar después de otra actualización del terminal.

¿Cuál es el problema? No lo entiendo.

 
Dmitriy Strelnikov:

¿Cuál es el problema? No lo entiendo.

sindicato
 
o_o:
sindicato


Gracias por su respuesta. Sin embargo, la pregunta sigue siendo relevante. MQL4 no soporta uniones. Al menos el doc lo dice.

Además, mientras investigábamos, nos surgieron algunas dudas más:

- En los procedimientos send y recv el parámetro int flags (el último) no está contemplado de ninguna manera. En mi caso con send toma valor - 0, y en recv - 8, ¿por qué?

- El post original dice que el cliente es síncrono, pero el ejemplo sólo implementa el envío de una cadena al servidor. Que pasa con la respuesta ... .

Perdón por mis preguntas de dummies. Estoy tratando de entenderlo, pero aún no lo consigo ... si me pueden ayudar por favor.

Quiero implementar una clase de trabajo para la interacción con un servidor de terceros de muchos clientes. Todavía estoy atascado, por desgracia.

 
Dmitriy Strelnikov:


Gracias por la respuesta. Sin embargo, la pregunta sigue siendo pertinente. MQL4 no soporta uniones. Al menos el doc lo dice.

Además, mientras investigaba, me surgieron algunas dudas más:

- En los procedimientos send y recv el parámetro int flags (el último) no está contemplado de ninguna manera. En mi caso con send toma valor - 0, y en recv - 8, ¿por qué?

- El post original dice que el cliente es síncrono, pero el ejemplo sólo implementa el envío de una cadena al servidor. Que pasa con la respuesta ... .

Perdón por mis preguntas de dummies. Estoy tratando de entenderlo, pero aún no lo consigo ... si me pueden ayudar por favor.

Quiero implementar una clase de trabajo para la interacción con un servidor de terceros de muchos clientes. Todavía estoy atascado, por desgracia.

Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading

Cambios que rompen el código en el lenguaje MQL4

Alain Verleyen, 2017.05.18 22:10


Introdujeron unión (no documentado en MT4, pero funciona bien con 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:


SÍ. Los sindicatos funcionan. ¡¡¡GRACIAS!!! Tengo entendido que el apoyo sindical se ha añadido a partir del 12 de mayo de 2017. ¡¡¡Genial!!!

Estaría bien que los desarrolladores lo reflejaran en el doc.

Un ejemplo sencillo que ilustra el trabajo con unión

//+------------------------------------------------------------------+
//| Función de inicio del programa de script|
//+------------------------------------------------------------------+

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

void OnStart()
  {
//---
   a.intN = 555; 
   
   // uint - 4 bytes 
   // uchar[4] - una matriz de 4 elementos de un byte cada uno
   // 555 decimal, esto es 0000 0000 0000 0010 1011 binario de 4 bytes.
   // respectivamente, se trata de una matriz de 4 dígitos decimales 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:

- En los procedimientos send y recv, el parámetro int flags (el último) no está cubierto de ninguna manera. En el caso de send toma el valor 0, pero en recv toma el valor 8. ¿Por qué?

Porque te estás inventando las cosas, yo no veo flags =8.

- El post original dice que el cliente es síncrono, y el ejemplo sólo implementa el envío de una cadena al servidor. Qué pasa con la respuesta ... .

Con tales formulaciones de preguntas es mejor abordar aquí
 
o_o:

Porque te lo estás inventando. No veo ninguna bandera =8

Con tales formulaciones de preguntas es mejor dirigirse aquí.


¡Querido GURU! No tengo por costumbre inventarme las cosas. Mi error, aparentemente, fue que las preguntas fueron dirigidas al usuario con el nickname pavlick_ y se referían a la clase TCP_Client implementada por él y presentada en este hilo arriba - https://www.mql5.com/ru/forum/91150/page3#comment_2798881.

Así que pido disculpas por las molestias. Sin embargo, no esperaba una reacción tan tormentosa, por no decir más, por su parte.

Créame, a veces es útil para contener sus emociones negativas.

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

¡Igual! La misma pregunta.

 
MetaQuotes Software Corp.:

Nuevo artículo Trabajar con sockets en MQL, o Cómo convertirse en un proveedor de señales ha sido publicado:

Autor: o_O


Hola, ¿ Este código funciona en MQL4 ?

Estoy intentando portarlo a mql4, y cuando se llama a la función DLL bind() en la función MQL StartServer, me da el siguiente mensaje:

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:

Hola, Este código funciona en MQL4 ?

fuente fue compilado para x64

es necesario cambiar todos los punteros a 32 bits

p.e. usar SOCKET32 en lugar de SOCKET64 etc