Discusión sobre el artículo "Comunicándonos con Meta Trader 5 usando conexiones designadas sin utilizar DLL" - página 6

 
Igor Semyonov:

Tengo una pregunta de este tipo:

El artículo dice:

Conéctese al servidor por partida doble: al ordenador remoto llamado 'RemoteServerName' o al local. En el local todo funciona y no hay preguntas.

Pero si ejecutas PipeServer.exe en un VPS remoto, y luego lanzas el script cliente al gráfico en otro PC, habiendo cambiado RemoteServerName por el nombre perteneciente al VPS, entonces el servidor y el cliente no se ven, es decir, el canal no funciona, no hay conexión.

¿Cuál es el problema aquí, es que el nombre de un VPS en particular debe ser escrito inicialmente en PipeServer.exe o qué?

sería interesante escuchar la solución,

si los desarrolladores han especificado la posibilidad de utilizarlo para un equipo remoto, probablemente debería funcionar.

Espero que los desarrolladores aquí pueden ayudar con un ejemplo de cómo realizar esto en un equipo remoto.

 

¿Alguien utiliza este cliente? ¿Para qué y cómo?

Leo al principio:

"Un script desde el terminal se conectará a este servidor e intercambiará datos con él".

¿Puedo preguntar cómo puedo conectar dos clientes que se ejecutan en dos terminales diferentes a través de este servidor? Por lo que entiendo del servidor y las pruebas sólo un cliente se conecta al servidor y ¿qué puede hacer este servidor con los mensajes que ha recibido?

¿No sería necesario tener

1) un servidor independiente a la espera de múltiples clientes,

2) que cada cliente inicie la conexión enviando un ID único de sí mismo,

3) un servidor enviando a cada cliente conectado cualquier mensaje que el servidor haya recibido - puede ser excepto al cliente del que ha recibido el mensaje,

4) un servidor que envíe cada mensaje comenzando con el ID único del cliente que ha enviado el mensaje?

- De esta manera el cliente puede detectar sus propios mensajes y borrarlos - si fueron devueltos por el servidor, por la razón que sea.

- De esta manera el cliente puede detectar el cliente(s) que debe escuchar - debe ser parte del código mq4 del cliente.

 
¡Disculpas - googleado la traducción.
No entiendo el punto en absoluto! ¿Qué hace el servidor con los datos como me sale de allí en otro cliente?
Aquí he proyectado una solución racional: Enlace a la discusión Inglés. ¿Es de suponer que alguien puede escribir una respuesta Inglés?
Muchas gracias, Calli
 

La solución presentada aquí no funciona con Async Named Pipes. Consulte https://www.mql5.com/en/forum/94343

Newgel

MQL5 Asynchronous named pipes?
MQL5 Asynchronous named pipes?
  • www.mql5.com
I´m trying to integrate MT5 with an external Named Pipe Server application written in C# through named pipes...
 

Buenas tardes MetaQuotes.

¿Puedes decirme si hay planes para añadir una función análoga a WaitNamedPipe() de WinAPI a MQL4/5?

Dicha función eliminaría la necesidad de que los clientes MQL consulten el canal a través de FileOpen() en un bucle infinito, mientras esperan a que el servidor abra una instancia del canal. Esto es especialmente útil cuando la espera es larga.

 
codesurfer:

Buenas tardes MetaQuotes.

¿Puedes decirme si hay planes para añadir una función análoga a WaitNamedPipe() de WinAPI a MQL4/5?

Dicha función eliminaría la necesidad de que los clientes MQL consulten el canal a través de FileOpen() en un bucle infinito, mientras esperan a que el servidor abra una instancia del canal. Esto es especialmente útil cuando la espera es larga.



Este tipo de preguntas es mejor hacerlas en Service Desk a través de su perfil.
 

Hola.

Inicio PipeServer.exe, ejecuto el script pipeclient.mq5 en modo depuración. El script hace un bucle:

//--- espera al servidor de tuberías
   while(!IsStopped())
     {
      if(ExtPipe.Open("\\\\REN\\pipe\\MQL5.Pipe.Server",FILE_READ|FILE_WRITE|FILE_BIN)!=INVALID_HANDLE) break;
      if(ExtPipe.Open("\\\\.\\pipe\\MQL5.Pipe.Server",FILE_READ|FILE_WRITE|FILE_BIN)!=INVALID_HANDLE) break;
      Sleep(250);
     }

¿Qué estoy haciendo mal?

Sistema: Windows 7 Ultimate (x64 PC basado), IE 11.00, RDP, UAC, AMD FX-8300 procesador de ocho núcleos , RAM: 5601 / 8190 Mb, HDD: 14763 / 114370 Mb, GMT+02:00
Terminal: MetaTrader 5 x64 build 1643 iniciado (MetaQuotes Software Corp.).

P.D. Ejecuto PipeServer como Administrador.

 

¿Quién puede ayudar a lanzar la carpeta de pruebas MQL5+python? Estoy dispuesto a compensar los costes de mano de obra.

Necesito un ejemplo práctico de implementación de llamadas a funciones desde un script de Python.

Estoy tratando de hacer una función en MQL5 interactuando con un script de Python, pero no a través de un archivo. Necesito un intercambio rápido de argumentos.

Agradecería cualquier ejemplo, por ejemplo, pasar unos números desde MT, y que el script de Python devolviera por ejemplo la suma de números de vuelta a MT.


 
mavar:

¿Quién puede ayudar a lanzar la carpeta de pruebas MQL5+python? Dispuesto a compensar los costes de mano de obra.

Necesito un ejemplo de trabajo de implementación de llamadas a funciones desde un script de Python.

Estoy tratando de hacer una función en MQL5 interactuando con un script de Python, pero no a través de un archivo. Necesito un intercambio rápido de argumentos.

Agradecería cualquier ejemplo, por ejemplo, pasar unos números desde MT, y que el script de Python devolviera por ejemplo la suma de números de vuelta a MT.


Implementado el servidor en C#, creo que todo esta bien. En Python creo que no es más difícil.

 

¿Hay planes para añadir una función a la biblioteca que compruebe si la conexión con el servidor está abierta? Según tengo entendido, ahora no existe tal función.

Handle retiene un valor distinto de cero incluso si se pierde la conexión con el servidor.