Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

Sockets [Erledigt, aber nicht gelöst]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
Beiträge: 12310
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Sockets [Erledigt, aber nicht gelöst]

Beitrag von Jan » Di, 20. Dez 2016 10:11

Hallo,

gerade verzweifle ich am Support enies Lieferanten. Es geht darum, aus einer Heizungsanlage die aktuellenWerte auszulesen. Das geht per RESTful Webservices. Eine Verbindung des Gerätes zum Internet gibt es nicht - das ist sowohl im Gerät abgeschaltet als auch durch Einstellungen in der Firewall geblockt.

Ich habe also mal eine simple Anfrage geschrieben:

Code: Alles auswählen

nSocket := SocketNew(AF_INET, SOCK_STREAM, 0, @nError)
lSuccess := SocketConnect(nSocket, , "192.168.1.7", 8080, @nError)
cText := Ansi2Utf8("GET 192.168.1.7:8080/user/menu HTTP/1.1" + crlf + crlf)
nRueckgabe := SocketSend(nSocket, cText, , , @nError)
nSocket ist sauber gefüllt. lSuccess = .T.. nError bleibt bei jeder Abfrage 0. Also sollte eigentlich immer alles sauber abgelaufen sein.

Aber: Wenn ich dann per SocketRecvString die Rückgabe abfrage, bekomme ich immer diese Meldung:
HTTP/1.1 404 Not Found
Content-Length: 150
Content-Type: application/xml;charset=UTF-8
Cache-Control: no-cache
Date: Tue, 20 Dec 2016 09:52:40 GMT

<?xml version="1.0" encoding="utf-8"?>
<eta version="1.0" xmlns="http://www.eta.co.at/rest/v1">
<error>No such application or domain</error>
</eta>
Der Support meint, ich würde wohl eine falsche URI verwenden. Kann aber nicht sein, denn wenn ich die in den Browser eingebe bekomme ich ganz sauber das Ergebnis.

Was mache ich da falsch?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1934
Registriert: Fr, 08. Feb 2008 21:29

Re: Sockets

Beitrag von georg » Di, 20. Dez 2016 10:25

Hallo, Jan -


ich würde in Firefox mittels F12 das Debugging (naja, fast Debugging) aktivieren, und dann die URI mal aufrufen und sehen, was da zwischen Browser und Gerät ausgetauscht wird.
Liebe Grüsse aus der Eifel,

Georg

Benutzeravatar
nightcrawler
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 272
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72181 Starzach
Kontaktdaten:

Re: Sockets

Beitrag von nightcrawler » Di, 20. Dez 2016 11:11

Wie Georg schon geschrieben hat: Datenverkehr mitloggen.
Ich vermute, dass Du den falschen Dienst anfrägst und evtl ein accept:json oder accept:xml mit in den Request einbauen musst.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de

Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
Beiträge: 12310
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Sockets

Beitrag von Jan » Di, 20. Dez 2016 11:49

Hallo Georg und Joachim,

da stelle ich mal eine ganz blöde Frage: Warum müsste ich bei einem GET noch Angaben machen müssen wie ein accept? Insbesondere im Hinblick darauf das ich bei einem Aufruf von "192.168.1.7:8080/user/menu" im Browser das korrekte Ergebnis zurückgeliefert bekomme?

Sorry, wenn ich mich da etwas Begriffstutzig anstelle. Das ist immer noch nicht so ganz meine Welt.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
nightcrawler
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 272
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72181 Starzach
Kontaktdaten:

Re: Sockets

Beitrag von nightcrawler » Di, 20. Dez 2016 11:55

Hallo Jan,
Dein Browser schickt das alles mit ... dem ist dann egal, ob HTML, XML, JSON oder eine Datei (der Dateiinhalt) zurückkommt. Der kann eben alles irgendwie anzeigen oder speichern. Diese Meta-Ebene wird im Header dem Sender mitgeteilt.
Der Sender schaut nun, was er alles senden kann (möglicherweise ist die Applikation nur auf JSON programmiert und kann kein XML, dann muss der Sender eben JSON ausliefern) und tut das entsprechend. Wenn Du nun dem Sender gar nicht mitteils, ws Du akzeptierst, dann weiss er nicht was zu tun ist und schickt eine Fehlermeldung.
Ich gehe schwer davon aus, dass Dein Socket per se nur HTML anfordert. Die Antwort vom Sender ist aber XML (wie im Header erkennbar). Er hat evtl keinen Dienst für HTML Ausgabe implementiert.
Deshalb der Vorschlag nach einem Logging - dort kannst Du den Header der Antwort anschauen und entsprechendes auch abfragen.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de

ramses
1000 working lines a day
1000 working lines a day
Beiträge: 699
Registriert: Mi, 28. Jul 2010 17:16

Re: Sockets

Beitrag von ramses » Di, 20. Dez 2016 12:42

Hallo Jan

sende mal nur folgendes "GET 192.168.1.7:8080/user/menu"

den die Fehlermeldung sagt doch dass der Server "HTTP/1.1" nicht findet.

Cu Carlo

Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
Beiträge: 12310
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Sockets

Beitrag von Jan » Di, 20. Dez 2016 13:22

Leider war der Support des Herstellers nicht gewillt oder nicht in der Lage mir mitzuteilen, welche Einstellungen exakt dafür notwendig sind. Ich habe die einschlägigen alle durchgetestet, insbesondere natürlich die, die in den verschiedenen Rückgaben aufgeführt werden. Das hat alles nichts gebracht.

Ich hab mir das jetzt mal total einfach gemacht. Da ich in diesem fall einfach nur GET-Abfragen mache, bin ich auf LoadFromUrl() umgestiegen. Das hat dann sofort anstandslos funktioniert. Da kann man im nachhinein nur sagen: Warum einfach, wenn es auch kompliziert geht. ;-)

Auch wenn das letztendlich nicht zum gewünschten Ziel geführt hat - danke für alle Eure Hinweise und Tipps.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1305
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Sockets [Erledigt, aber nicht gelöst]

Beitrag von Rudolf » Mi, 21. Dez 2016 9:06

Hallo Jan,
ich nehme TServerXMLHTTPRequest() von OT4XB oder Chilkat, hier kann man noch diverse Parameter setzen wie timeout, ignorecertall etc.
Grüße
Rudolf

Code: Alles auswählen

oHttp := TServerXMLHTTPRequest():New()
if oHttp:Open("GET",cUrlList,,cUser,cPWD)
     oHTTp:lIgnoreCertAll := .t.
     *oHttp:SetTimeOuts( nResolveTimeOut,nConnectTimeOut,nSendTimeOut,nReceiveTimeOut )
     if oHttp:Send()
          sleep(5)
          *nStatus1 := oHttp:status()
           cc := oHttp:responseBody

ramses
1000 working lines a day
1000 working lines a day
Beiträge: 699
Registriert: Mi, 28. Jul 2010 17:16

Re: Sockets [Erledigt, aber nicht gelöst]

Beitrag von ramses » Mi, 21. Dez 2016 10:23

@Jan

Jan hast du xb2net?

Cu Carlo

Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
Beiträge: 12310
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Sockets [Erledigt, aber nicht gelöst]

Beitrag von Jan » Mi, 21. Dez 2016 10:32

Hallo Carlo,

nein. benutze ich nicht.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
Beiträge: 12310
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Sockets [Erledigt, aber nicht gelöst]

Beitrag von Jan » Mi, 21. Dez 2016 10:36

Hallo Rudolf,

mit den entsprechenden Funktionen von Pablo hatte ich mal vor zwei oder drei Jahren angefangen, weil ich da noch keine Professional Subscription hatte. Das habe ich dann aber sehr schnell wieder aufgegeben. Die Funktionen in diesem Bereich waren mir ganz extrem zu langsam, und eine passende Auftragsprogrammierung durch Pablo ging sehr schleppend voran und wurde dann irgendwann von ihm auch ohne jeden Kommentar nicht weiter geführt. Seither bin ich eher vorsichtig, was den Einsatz von ot4xb angeht. Das läßt sich nicht immer vermeiden, weil in manchen Bereichen Alaska einfach nicht in die Puschen kommt. Aber soweit möglich schmeiße ich das halt raus.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1305
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Sockets [Erledigt, aber nicht gelöst]

Beitrag von Rudolf » Mi, 21. Dez 2016 11:01

Hallo Jan,
ist auch meine Philosophie, stelle jetzt alles auf Chilkat um, aber hatte sonst mit OT4XB nie Probleme mit dem HTTPREQUEST, auch nicht mit Geschwindigkeit.
Grüße
Rudolf

ramses
1000 working lines a day
1000 working lines a day
Beiträge: 699
Registriert: Mi, 28. Jul 2010 17:16

Re: Sockets [Erledigt, aber nicht gelöst]

Beitrag von ramses » Mi, 21. Dez 2016 17:17

@Rudolf

du stellst alles auf "Chilkat" um?

Benötigst du dann nicht auch ot4xb in den Wrapper Funktionen?

Bist du mit dem XML-Parser glücklich?

Cu Carlo

Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1305
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Sockets [Erledigt, aber nicht gelöst]

Beitrag von Rudolf » Do, 22. Dez 2016 9:39

Hallo Carlo,
brauchst kein OT4XB, nur die DLL registrieren und einmal am Anfang die Lizenzfunktion aufrufen. XML Parser funktioniert sehr gut, wie auch alles andere. Hat sehr gute Doku (Beispiele in VFP) und gute Logfunktion bei Problemen. Für ein Tool mit so einem großen Funktionsumfang ein sehr guter Preis finde ich.
Grüße
Rudolf

ramses
1000 working lines a day
1000 working lines a day
Beiträge: 699
Registriert: Mi, 28. Jul 2010 17:16

Re: Sockets [Erledigt, aber nicht gelöst]

Beitrag von ramses » Do, 22. Dez 2016 11:36

Hallo Rudolf
du hast recht gute Doku und viele Funktionen. Leider per ActiveX.
ActiveX steht bei uns auf der "Never, ever do that again!" - Liste.....
Gruss
Carlo

Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1305
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Sockets [Erledigt, aber nicht gelöst]

Beitrag von Rudolf » Do, 22. Dez 2016 12:10

Hallo Carlo,
schade, welche Gründe sind das ? Hatte bis jetzt keine Probleme, auch nicht bei "komplizierten" Kunden und im Hochsicherheitsbereich.
Güße
Rudolf

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13768
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Sockets [Erledigt, aber nicht gelöst]

Beitrag von brandelh » Do, 22. Dez 2016 12:50

Für mich ist ActiveX auch auf der "das mach ich nur im Notfall" Liste ;-)
Registrieren von DLLs auf Zielrechnern, das geb ich mir nicht - insbesondere bei Citrix Servern immer eine Freude mit dem Admin.
Gruß
Hubert

Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
Beiträge: 12310
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Sockets [Erledigt, aber nicht gelöst]

Beitrag von Jan » Do, 22. Dez 2016 12:55

Ich habe mich ebenfalls soweit möglich von ActiveX verabschiedet. Zu langsam, manchmal instabil (was nicht immer an Xbase++ liegen muß), ständig Probleme mit Kunden wo sich das nicht installieren ließ, oftmals verwirrende oder fehlende Doku der Schnittstelle auf Seiten der ActiveX-Module - wenn immer möglich verwende ich schon länger alternative Möglichkeiten.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10580
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Sockets [Erledigt, aber nicht gelöst]

Beitrag von AUGE_OHR » Mi, 28. Dez 2016 7:44

ramses hat geschrieben:ActiveX steht bei uns auf der "Never, ever do that again!" - Liste.....
wieso ... wenn man den Code selbst schreibt :)
gruss by OHR
Jimmy

Antworten