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
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Sockets [Erledigt, aber nicht gelöst]

Beitrag von Jan »

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
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Sockets

Beitrag von georg »

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 S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: Sockets

Beitrag von nightcrawler »

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
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Sockets

Beitrag von Jan »

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
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: Sockets

Beitrag von nightcrawler »

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
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Sockets

Beitrag von ramses »

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
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Sockets

Beitrag von Jan »

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
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

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

Beitrag von Rudolf »

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
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

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

Beitrag von ramses »

@Jan

Jan hast du xb2net?

Cu Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

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

Beitrag von Jan »

Hallo Carlo,

nein. benutze ich nicht.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

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

Beitrag von Jan »

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
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

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

Beitrag von Rudolf »

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
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

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

Beitrag von ramses »

@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
Valar Morghulis

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

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

Beitrag von Rudolf »

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
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

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

Beitrag von ramses »

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
Valar Morghulis

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

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

Beitrag von Rudolf »

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: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

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

Beitrag von brandelh »

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
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

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

Beitrag von Jan »

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
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

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

Beitrag von AUGE_OHR »

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