Discussion de l'article "Communiquer avec MetaTrader 5 en utilisant Named Pipes sans utiliser de DLL" - page 6

 
Igor Semyonov:

J'ai une question de ce type :

L'article dit :

Se connecter au serveur en vérifiant deux fois : sur l'ordinateur distant nommé 'RemoteServerName' ou sur l'ordinateur local. Sur l'ordinateur local, tout fonctionne et il n'y a pas de questions.

Mais si vous exécutez PipeServer.exe sur un VPS distant, et que vous lancez ensuite le script client sur le graphique d'un autre PC, en ayant changé RemoteServerName par le nom appartenant au VPS, alors le serveur et le client ne se voient pas, c'est-à-dire que le canal ne fonctionne pas, il n'y a pas de connexion.

Quel est le problème ici, est-ce que le nom d'un VPS particulier devrait être initialement écrit dans PipeServer.exe ou quoi ?

Il serait intéressant de connaître la solution,

Si les développeurs ont spécifié la possibilité de l'utiliser pour un ordinateur distant, cela devrait probablement fonctionner.

J'espère que les développeurs ici présents pourront nous aider avec un exemple de réalisation sur un ordinateur distant.

 

Quelqu'un utilise-t-il toujours ce client ? Pour quoi et comment ?

Je lis au début :

"Un script du terminal se connectera à ce serveur et échangera des données avec lui.

Puis-je demander comment je peux connecter deux clients fonctionnant sur deux terminaux différents via ce serveur ? D'après ce que je comprends du serveur et des tests, un seul client se connecte au serveur et que peut faire ce serveur avec les messages qu'il a reçus ?

Ne serait-il pas nécessaire d'avoir

1) un serveur indépendant qui attend plusieurs clients,

2) que chaque client démarre la connexion en envoyant un identifiant unique,

3) un serveur envoyant à chaque client connecté tout message qu'il a reçu - sauf au client dont il a reçu le message,

4) un serveur qui envoie chaque message en commençant par l'identifiant unique du client qui a envoyé le message ?

- De cette manière, le client peut détecter ses propres messages et les supprimer - s'ils ont été renvoyés par le serveur, quelle qu'en soit la raison.

- De cette façon, le client peut détecter le(s) client(s) qu'il doit écouter - cela doit faire partie du code mq4 du client.

 
Mes excuses - j'ai cherché la traduction sur Google.
Je ne comprends pas du tout l'idée ! Que fait le serveur avec les données que je reçois de là dans un autre client ?
Ici, j'ai projeté une solution rationnelle : lien vers une discussion en anglais. Je suppose que quelqu'un peut écrire une réponse en anglais ?
Merci beaucoup, Calli.
 

La solution présentée ici ne fonctionne pas avec les Named Pipes asynchrones. Veuillez consulter 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...
 

Bonjour MetaQuotes.

Pouvez-vous me dire s'il est prévu d'ajouter une fonction analogue à WaitNamedPipe() de WinAPI à MQL4/5 ?

Une telle fonction éviterait aux clients MQL d'interroger le canal via FileOpen() dans une boucle infinie, en attendant que le serveur ouvre une instance du canal. Ceci est particulièrement utile lorsque l'attente est longue.

 
codesurfer:

Bonjour MetaQuotes.

Pouvez-vous me dire s'il est prévu d'ajouter une fonction analogue à WaitNamedPipe() de WinAPI à MQL4/5 ?

Une telle fonction éviterait aux clients MQL d'interroger le canal via FileOpen() dans une boucle infinie, en attendant que le serveur ouvre une instance du canal. Cette fonction est particulièrement utile lorsque l'attente est longue.



Il est préférable de poser ce type de questions dans le Service Desk, via votre profil.
 

Bonjour.

Je démarre PipeServer.exe, je lance le script pipeclient.mq5 en mode debug. Le script tourne en boucle ici :

//--- attendre le serveur de pipe
   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'est-ce que je fais de travers ?

Système : Windows 7 Ultimate (PC basé sur x64), IE 11.00, RDP, UAC, AMD FX-8300 Eight-Core Processor , RAM : 5601 / 8190 Mb, HDD : 14763 / 114370 Mb, GMT+02:00
Terminal : MetaTrader 5 x64 build 1643 démarré (MetaQuotes Software Corp.).

P.S. Je lance PipeServer en tant qu'administrateur.

 

Qui peut aider à lancer le classeur de test MQL5+python ? Je suis prêt à compenser les coûts de main-d'œuvre.

J'ai besoin d'un exemple concret d' implémentation d'appels de fonctions à partir d'un script Python.

J'essaie de faire interagir une fonction de MQL5 avec un script Python, mais pas par l'intermédiaire d'un fichier. J'ai besoin d'un échange rapide d'arguments.

Je serais reconnaissant pour tout exemple, par exemple, pour passer quelques nombres de MT, et le script Python retournerait par exemple la somme des nombres à MT.


 
mavar:

Qui peut aider à lancer le classeur de test MQL5+python ? Prêt à compenser les coûts de main-d'œuvre.

J'ai besoin d'un exemple pratique d' implémentation d'appels de fonctions à partir d'un script Python.

J'essaie de créer une fonction dans MQL5 qui interagit avec un script Python, mais pas par l'intermédiaire d'un fichier. J'ai besoin d'un échange rapide d'arguments.

Je serais reconnaissant pour tout exemple, par exemple, pour passer quelques nombres de MT, et le script Python retournerait par exemple la somme des nombres à MT.


J'ai implémenté le serveur en C#, je pense que tout va bien. En Python, je pense que ce n'est pas plus difficile.

 

Est-il prévu d'ajouter une fonction à la bibliothèque qui vérifie si la connexion au serveur est ouverte ? D'après ce que j'ai compris, une telle fonction n'existe pas pour l'instant.

Le Handle conserve une valeur non nulle même si la connexion au serveur est perdue.