Diskussion zum Artikel "Communicating With MetaTrader 5 Using Named Pipes Without Using DLLs" - Seite 6

 
Igor Semyonov:

Ich habe eine Frage wie diese:

Im Artikel steht:

Stellen Sie eine Verbindung zum Server her, indem Sie doppelt prüfen: mit dem entfernten Computer mit dem Namen 'RemoteServerName' oder mit dem lokalen Computer. Auf dem lokalen Computer funktioniert alles und es gibt keine Fragen.

Aber wenn man PipeServer.exe auf einem entfernten VPS ausführt und dann das Client-Skript auf die Karte auf einem anderen PC wirft, nachdem man RemoteServerName auf den Namen des VPSgeändert hat , dann sehen sich der Server und der Client nicht, d.h. der Kanal funktioniert nicht, es gibt keine Verbindung.

Was ist das Problem hier, ist es, dass der Name eines bestimmten VPS zunächst in PipeServer.exe geschrieben werden sollte oder was?

Es wäre interessant, die Lösung zu erfahren,

wenn die Entwickler die Möglichkeit angegeben haben, es für einen entfernten Computer zu verwenden, sollte es wahrscheinlich funktionieren.

Ich hoffe, die Entwickler hier können mit einem Beispiel helfen, wie man dies auf einem entfernten Computer realisieren kann.

 

Benutzt irgendjemand diesen Client überhaupt? Wofür und wie?

Ich habe am Anfang gelesen:

"Ein Skript des Terminals verbindet sich mit diesem Server und tauscht Daten mit ihm aus."

Darf ich fragen, wie ich zwei Clients, die auf zwei verschiedenen Terminals laufen, über diesen Server verbinden kann? Soweit ich den Server und die Tests verstehe, verbindet sich nur ein Client mit dem Server und was kann dieser Server mit den empfangenen Nachrichten machen?

Wäre es nicht notwendig, dass man

1) ein unabhängiger Server, der auf mehrere Clients wartet,

2) jeder Client muss die Verbindung starten, indem er eine eindeutige ID von sich selbst sendet,

3) ein Server, der an jeden angeschlossenen Client jede Nachricht sendet, die er erhalten hat - eventuell mit Ausnahme des Clients, von dem er die Nachricht erhalten hat,

4) ein Server, der jede Nachricht mit der eindeutigen ID des Clients beginnt, der die Nachricht gesendet hat?

- Auf diese Weise kann der Client seine eigenen Nachrichten erkennen und sie löschen, wenn sie vom Server zurückgeschickt wurden, aus welchem Grund auch immer.

- Auf diese Weise kann der Client erkennen, welche(r) Client(s) er abhören soll - dies muss Teil des mq4-Codes des Clients sein.

 
Entschuldigung - habe die Übersetzung gegoogelt.
Ich verstehe den Sinn überhaupt nicht! Was macht der Server mit den Daten, die ich von dort in einem anderen Client bekomme?
Hier habe ich eine vernünftige Lösung entworfen: Link zur englischen Diskussion. Vermutlich kann jemand eine englische Antwort schreiben?
Vielen Dank, Calli
 

Die hier vorgestellte Lösung funktioniert nicht mit Async Named Pipes. Bitte siehe 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...
 

Guten Tag MetaQuotes.

Können Sie mir sagen, ob es Pläne gibt, eine Funktion analog zu WaitNamedPipe() von WinAPI zu MQL4/5 hinzuzufügen?

Eine solche Funktion würde die Notwendigkeit für MQL-Clients beseitigen, den Kanal über FileOpen() in einer Endlosschleife abzufragen, während sie darauf warten, dass der Server eine Instanz des Kanals öffnet. Dies ist besonders nützlich, wenn die Wartezeit lang ist.

 
codesurfer:

Guten Tag MetaQuotes.

Können Sie mir sagen, ob es Pläne gibt, eine Funktion analog zu WaitNamedPipe() von WinAPI zu MQL4/5 hinzuzufügen?

Eine solche Funktion würde die Notwendigkeit für MQL-Clients beseitigen, den Kanal über FileOpen() in einer Endlosschleife abzufragen, während sie darauf warten, dass der Server eine Instanz des Kanals öffnet. Dies ist besonders nützlich, wenn die Wartezeit lang ist.



Solche Fragen stellen Sie am besten im Service Desk über Ihr Profil.
 

Hallo.

Ich starte PipeServer.exe, führe das Skript pipeclient.mq5 im Debug-Modus aus. Das Skript läuft hier in einer Schleife:

//--- Warten auf Pipe-Server
   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);
     }

Was mache ich falsch?

System: Windows 7 Ultimate (x64 basierter PC), IE 11.00, RDP, UAC, AMD FX-8300 Acht-Kern-Prozessor, RAM: 5601 / 8190 Mb, HDD: 14763 / 114370 Mb, GMT+02:00
Terminal: MetaTrader 5 x64 build 1643 gestartet (MetaQuotes Software Corp.).

P.S. Ich führe PipeServer als Administrator aus.

 

Wer kann helfen, den MQL5+python Testbinder zu starten? Ich bin bereit, die Arbeitskosten zu kompensieren.

Ich brauche ein funktionierendes Beispiel für die Implementierung von Funktionsaufrufen aus einem Python-Skript.

Ich versuche, eine Funktion in MQL5 zu erstellen, die mit einem Python-Skript interagiert, aber nicht über eine Datei. Ich brauche einen schnellen Austausch von Argumenten.

Ich wäre für jedes Beispiel dankbar, z. B. um einige Zahlen von MT zu übergeben, und das Python-Skript würde z. B. die Summe der Zahlen an MT zurückgeben.


 
mavar:

Wer kann bei der Einführung des MQL5+python Testbinders helfen? Bereit, die Arbeitskosten zu kompensieren.

Ich brauche ein funktionierendes Beispiel für die Implementierung von Funktionsaufrufen aus einem Python-Skript.

Ich versuche, eine Funktion in MQL5 zu erstellen, die mit einem Python-Skript interagiert, aber nicht über eine Datei. Ich brauche einen schnellen Austausch von Argumenten.

Ich wäre dankbar für jedes Beispiel, zum Beispiel, um einige Zahlen von MT übergeben, und die Python-Skript würde zum Beispiel die Summe der Zahlen zurück zu MT.


Ich habe den Server in C# implementiert, ich denke, alles ist in Ordnung. Auf Python Ich denke, es ist nicht mehr schwierig.

 

Gibt es Pläne, der Bibliothek eine Funktion hinzuzufügen, die prüft, ob die Verbindung zum Server offen ist? So wie ich es verstanden habe, gibt es derzeit keine solche Funktion.

Handle behält einen Wert ungleich Null, auch wenn die Verbindung zum Server unterbrochen wird.