Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

12.12.2013, 23:02

Suche noch eine Loesung fuer Kommunikation zwischen Webserver und ein Programm

Hallo,

ich baue mir seit einigen Monaten ein Programm und wollte euch gerne davon erzaehlen und euch nach Tipps fragen, weil mir fehlt noch eine gute Loesung fuer eine Aufgabe.

Ich bin nur ein Hobby Programmierer und habe mir einige Sachen selbst beigebracht, daher fehlt mir oft mehr Fachwissen, die Sache die ich noch loesen muss ist bestimmt fuer erfahrene und ausgebildete Programmierer nicht so schwer.

Das Programm das ich mir im Moment baue ist fuer Forexhandel gedacht, ich benutze eine Software die Metatrader heist und mit dem Metatrader kann man online Forex (Devisenmarkt) handeln. Auf dem Metatarder ist es auch moeglich mit einer Programmiersprache die MQL4 heist, Zusatzprogramme zu bauen und so ein Zusatzprogramm baue ich im Moment.

Die Aufgabe von meinem Programm ist vom Metatrader aus, welcher auf meinen Heim PC laeuft, Handelssignale an eine online PHP Seite zu senden, die PHP Seite speichert die Signale, Kurse und andere aehnliche Daten die ich dort hin sende in einer online Mysql Datenbank. PHP Datei und Mysql Datenbank sind auf dem gleichen Webserver, so wie das bei einem Webhosting Packet gewoehnlich ist.

Es werden nicht nur Daten an die PHP Seite zum abspeichern gesendet, sondern auch Daten wieder zurueck gesendet an den Metatrader, das macht auch die gleiche PHP Seite, nachem sie aufgerufen wird und Datenabspeichert gibt sie auch Daten wieder als Rueckgabe aus und diese Daten brauche ich dann wieder im Metatrader.

Dieser Ablauf, die Kommunikation vom Metatrader mit der PHP Seite ist auch die Aufgabe die ich im Moment noch vernuenftig loesen muss und deswegen eure Tips gut gebrauchen kann.

Im Moment habe ich eine nicht sogute Loesung die oft nur zu Programmabstuerzen fuehrt. Die Loesung die ich im Moment habe ist eine Funktion welche aus Windows Wininet DLL Datei import aufgebaut ist, diese Funktion bietet mir im Moment die Moeglichkeit ein Internetlink zusammen mit Get Parametern auf zu rufen und die Rueckgabe der aufgerufenen Seite wird wieder zurueck gegeben und steht dann zur Verfuegung, also vom Prinzip her genau das was ich brauche, Problem ist aber halt das diese Funktion sehr schlecht funktioniert und es eigentlich nur staendig Programmabsturz deswegen gibt, es laeuft nicht sauber und ich habe die Funktion auch nur in einem Online Tutorial gefunden und nicht selbst gebaut.


Ich vermute das der Metatrader zu schwach ist fuer solche Funktionen die aus fremden nicht MQL4 Programmiersprache Elementen gebaut sind. Auf Windows Wininet DLL Dateien import reagiert der Metatarder sehr empfindlich.

Was der Metatrader gut kann ist Infos in Textdateien schreiben. Weil fuer sowas reicht die eigene MQL4 Programmiersprache aus. Ich hatte deswegen ueberlegt das man die Internetlinks mit den Get Parameter in Textdateien schreiben koennte und ein anderes Programm das auf meinen PC laeuft koennte dann diese Internetlinks aus der Textdatei auslesen und aufrufen und die Rueckgabe wieder in eine Textdatei speichern, welche dann der Metatrader wieder auslesen kann, den mit Textdateien arbeiten funktioniert beim Metatrader gut genug.

Hat jemand von euch gute Ideen fuer mich Tipps wie man das machen kann oder andere Loesungen? Ich weis selber noch nicht was fuer ein Programm sowas machen koennte was ich dort beschrieben habe, das auslesen von Internetlinks, dann aufrufen und wieder die Rueckgabe abspeichern in eine Textdatei.

MFG

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

13.12.2013, 06:54

Ohne Dir zu nahe treten zu wollen, aber ich glaube eher, dass Du Fehler und unbehandelte Spezialsituationen in Deinem Code hast und dass diese die Abstürze verursachen und nicht die DLL. Wenn Du das behebst, sind Deine Probleme vermutlich schon weg.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

13.12.2013, 09:27

Bin auch BlueCobolds Meinung. Allerdings kann man dazu halt nichts sagen, ohne den Code gesehen zu haben. Und selbst dann vermutlich nicht, weil hier kaum jemand MQL4 benutzen dürfte.
Vielleicht findest du ja auch eine etwas spezialisiertere Community. Hier kannst du glaube ich zu deinem Problem nicht mehr als generelle Tipps erwarten.
Lieber dumm fragen, als dumm bleiben!

4

13.12.2013, 11:32

danke fuer die Tipps.

Beim Metatrader bin ich mir schon sehr sicher das das Problem durch die function HTTPGet entsteht, welche aus DLL Dateien von jemand gebaut wurde, der Erstelller dieser Funktion hat das auch nur hobbymaessig gemacht und arbeitet nicht fuer die Metatrader Firma und weis deswegen wahrscheinlich auch nicht genau worauf man achten muss damit das immer Fehlerfrei laeuft.

Ich programmiere auch schon seit 2005 auf dem Metatrader und sehe diesen Fehler des Programmabsturzes, beziehungsweise Blockade muss man das eher nennen, weil dann so eine Meldung "Timeout" kommt und man das Programm neu starten muss, aber nicht der komplette Metatarder deswegen abstuertzt, nur bei benutzen von dll Dateien.

Bei anderen Programmen, wo nur reines MQL4 zum bauen benutzt wird kommt sowas nie vor, aber beim benutzen von fremden DLL Dateien kommen staendig Probleme vor. Ob es daran liegt das die DLL Dateien und Funktionen nicht so gut gebaut sind, die Leute die den Metatrader gebaut haben kennen sich da wahrscheinlich am ehesten aus und koennten bestimmt fehlerfreie DLL Dateien erstellen, aber die meisten DLL Beispiele sind von Hobbyprogrammierern und erzeugen irgendwann Fehler, oder ob der Metatarder generell zu schwach ist um fremde Funktionen gut aus zu fuehren weis ich nicht, aber ich denke die beste Loesung ist dem Metatrader von diesen DLL Funktionen einfach zu befreien, damit er sauber arbeitet und den Rest, also die Kommunikation mit den Webserver muss ich anders loesen.

Und da kann ich eure Hilfe gut gebrauchen, weil ich mich nicht sogut auskenne mit anderen Programmiersprachen.

Ich habe manchmal den Tipp bekommen ein Programm das wget heist zu benutzen, vielleicht kennt das jemand von euch oder vielleicht kennt jemand ein aehnliches Programm.

Ich braeuchte im Prinzip jetzt ein Programm das sich immer Internetlinks aus einer Textdatei holt und aufruft und die Rueckgabe der website wieder in ein bestimmten Ordner als Textdatei abspeichert?
Ich denke sowas waere jetzt eine gute Loesung fuer mich, dann koennte ich die fehlerhafte DLL Datei aus meinem Metatarder Programm raus nehmen und mithilfe von so einem Programm die Kommunikation zum webserver machen.

5

13.12.2013, 13:20

Es könnte doch gut möglich sein, dass es sich wirklich um einen Timeout handelt.
Du könntest evtl die Zeit verändern, bis es einen Timeout gibt. Falls es sich um einen Timeout handelt, wird eine Textdatei, die Situation nicht ändern, da es trotzdem per HTTP(wenn du Links aufrufst) geht.

Ansonsten glaube ich auch kaum, dass hier jemand sich wirklich gut damit auskennt.



danke fuer deine Unterstuetzung.

Diesen Timeout beim Metatrader kann man nicht veraendern und der kommt im Prinzip auch nur wegen der httpGet Funktion vor, die aus der DLL Datei gebaut wird. Deswegen will ich die Funktion und raus nehmen weil der Metatrader immer sehr sensibel ist bei DLL Dateien import.

Wenn ich mit normalen Textdateien arbeite gibt es keine probleme, der Metatrader kann gut mit Dateien arbeiten, er hat eigene Funktionen um mit Textdateien zu arbeiten, aber diese importierte httpGet Funktion gehoert nicht zu den Standard Funktionen vom Metatrader, deswegen verursacht die auch so leicht ein Timeout und andere Probleme.

Ich denke auch das es hier wahrscheinlich nicht so viele oder ueberhaupt jemand gibt der sich mit dem Metatrader auskennt, aber mit dem Thema Kommunikation mit den Webserver kennen sich vielleicht einige hier aus.

Kennt jemand ein Programm das Internetlinks aus einer Textdatei auslesen und aufrufe kann und dann die aufgerufene Website als Rueckgabe in einer Textdatei speichert?

6

13.12.2013, 14:12

Kennt jemand ein Programm das Internetlinks aus einer Textdatei auslesen und aufrufe kann und dann die aufgerufene Website als Rueckgabe in einer Textdatei speichert?


Das ist nicht besonders schwierig zu programmieren. Das Problem wird eher die Einbindung in das Metatrader Programm, zu machen.



ich hatte mir das so ueberlegt, wenn ein Programm die Rueckgabe der Website in einem Ordner abspeichert zu dem der Metatrader Zugang hat, dann kann ich mit dem Metatrader diese Textdatei auslesen und habe somit eine Funktionierende Kommunikation.

Das Programm soll erst ein Internetlink aus einer Textdatei abholen koennen, die Textdatei kann ich mit dem Metatrader erstellen und die Internetlinks mit Get Parametern vorbereiten und das Programm ruft die Internetlinks dann auf.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

13.12.2013, 15:20

Genau das tut wget.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

8

13.12.2013, 16:39

danke fuer den Tipp.

ich habe wget schon oefter gehoert und schaue mir am besten einige tutorial dazu an, ich denke wenn ich das mit wget bauen kann, dann ist es doch eine vernueftige Loesung, der Metatrader ist dann ausgelastet und wget funktioniert bestimmt zufaerlaessig, weil das von erfahrenen Programmierern entwickelt wurde und weit verbreitet ist.

9

15.12.2013, 19:42

Hallo,

versteht jemand von euch zufaellig den Code von folgender Funktion mit der ich per FTP Bilder auf mein Webserver lade, die Funktion benutze ich vom Metatrader aus und die ist mit Windows Wininet Funktion gebaut und was ich gerne wissen wuerde ist, ob es moeglich ist den Pfad an zu geben in welchen Order die Datei auf den Webserver gesendet wird, den im Moment wird es immer in das Hauptverzeichnis gesendet und ich wuerde gerne auch in ein anderes Verzeichnis die Datei damit senden koennen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
bool SendWithFTP(string str)
{
//----
   int hIntObj, hIntObjConn;
   string Password, ServerName, UserName, LocalFile, HostFile;
   bool Success;

   //Uploading the file
   hIntObj=InternetOpenA("MyInternetObjectName",1,NULL,NULL,NULL);//We create an object of type "Internet"
   if (hIntObj>0)
      {
         ServerName=FTPServer;//Your ftp server
         UserName=FTPUsername;//Your username you use when manually establish a ftp session
         Password=FTPPassword;//Your password you use when manually establish a ftp session
         hIntObjConn=InternetConnectA(hIntObj, ServerName, 0, UserName, Password, INTERNET_SERVICE_FTP, NULL, NULL);//We hang a FTP session on our internet object created. The session could have been a HTTP session or even a HTTPS session. See http://msdn.microsoft.com/en-us/library/aa385473(VS.85).aspx
         if (hIntObjConn>0)
            {
               string path=TerminalPath()+"\experts\files\\"+str;
               LocalFile=path;//The physical address in your local machine where the file to be uploaded is.
               path=str;
               HostFile=path;//The name of the remote file uploaded
               Success=FtpPutFileA(hIntObjConn, LocalFile, HostFile, FTP_TRANSFER_TYPE_BINARY, NULL);               
               //if(Success)Print("SendFTP  "+str+" Update: ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES|TIME_SECONDS));
               if(Success==false)Print("SendFTP  error "+str+" at: ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES|TIME_SECONDS));
            }
      }
   InternetCloseHandle(hIntObj);
return(Success);
//----
}


Uebrigens findet jemand von euch das es besser ist mit einem anderen Protokoll zum Beispiel HTTP statt mit FTP die Dateien zu senden, in meinen Fall sind die Dateien immer Bilder vom aktuellen Kurs, also der Chart mit allen Linien usw.

10

15.12.2013, 20:51

Es müsste einen FTP-Befehl geben, um das aktuelle Verzeichnis zu wechseln. Ruf den auf, bevor du die Dateien hochlädst.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige