welches Package für TCP/http ?

Alle Fragen zur Netzwerkkommunikation
Antworten
danny61
Beiträge: 94
Registriert: So 5. Nov 2006, 18:40
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

welches Package für TCP/http ?

Beitrag von danny61 »

Hallo,
ich möchte einen Client (mit GUI) für eine Online-Datenbankabfrage erstellen.
Das zu verwendende Protokoll wird wohl http sein.
Anfrage und Antwort finden im XML Format statt.
Für den XML Teil kommen sicherlich DOM und TxmlRead + Write zum Einsatz.
Da ich aber bisher keinerlei Erfahrung mit Netzwerkprogrammierung habe, suche ich nun nach einem Package das mir möglichst viel Arbeit abnimmt, das stabil ist und möglichst eine gute Doku hat.
Ich habe heute schon einiges zu dem Thema gefunden (lNET, Synapse, indy, IPro?,sockets) aber je mehr ich finde, umso verwirrter werde ich :-)
Ich habe keine Ahnung welches dieser Packages was kann und was nicht.
Und die Dokus sind leider größtenteils auch nicht sehr Einsteigerfreundlich.

Ich könnte also eine kleine Starthilfe gebrauchen. Welches Package ist wofür geeignet oder zu empfehlen ?
thx

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: welches Package für TCP/http ?

Beitrag von theo »

Naja, also ich empfehle immer Synapse.
Allerdings ist es eher geeignet für Programmierer als für "Klicker" ;-)

Was Synapse tut, tut es gut und plattformunabhängig.

Aber ein bisschen selber denken ist schon angesagt bei Synapse.
Dafür brauchst du es nicht installieren oder dich mit verschiedenen Versionen rumschlagen.

Ich schlage vor, dass du es einfach ausprobierst:
http://synapse.ararat.cz/
Es gibt ein paar Demos und ein Wiki.

Da du offenbar nur einen Client schreiben willst, der mit einem Webserver kommuniziert, sollte es nicht allzu schwierig sein.
Die Server-Seite machst du mit PHP?

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Hi danny61,

google mal nach Indy, da findest Du V 10.1.2 glaub ich. Das läßt sich unter lazarus installieren. Allerdings mußt Du darauf achten bei den Einstellungen für das Package noch den Verweis auf das Indy-fpc Verzeichnis anzufügen sonst klatscht er auf.

Die Indy's bieten so ziemlich alles was man sich wünschen kann. Incl. HTTP-Server und -Client, IRC, TCP und so ziemlich alle Sicherheitsprotkolle wie SSL und SASL. Damit kannst du auch nen Mail-Client oder Mail-Server aufsetzen, also nur wenig was es nicht gibt. :roll:
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

danny61
Beiträge: 94
Registriert: So 5. Nov 2006, 18:40
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Beitrag von danny61 »

Den Server gibt es schon.
Ich habe eine kleine Literaturverwaltung geschrieben und möchte diese nun mit einer Online-Abfrage zu Übungszwecken "krönen" :)
Dazu will ich den Server des GBV (Gemeinsamer Bibliotheken Verbund) über die Z39.50 Schnittstelle abfragen.
Die PSI XML Interface Beschreibung habe ich schon hier aber noch keine Ahnung wie ich das ganze realisieren soll.
Aber dann wird halt wieder solange gelesen und rumprobiert bis es läuft ;-)

Ich suche halt ein Package mit dem ich die Abfrage durchführen kann (im Prinzip eine einfache GET Methode), die ich dann mit TxmlRead auswerte. Für zukünftige Projekte sollte das Package natürlich wesentlich mehr können. Ich will mich aber nur in ein Paket einarbeiten müssen.

Und schon habe ich hier zwei verschiedene Empfehlungen, wie befürchtet ;)
Synapse und Indy erschienen mir bei meinen Recherchen bisher auch am günstigsten allerdings soll Indy noch nicht so richtig stabil sein, oder ?
Wo liegen die Unterschiede ?
Und was ist TurboPower_IPro ? hierzu habe ich eigentlich am wenigsten Infos entdecken können.
thx

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Hi danny61,

dann bist mit den Indy's ganz gut bedient. Laß mit dem HTTP-Client nen GET los und du bekommst das fertige HTML als Stringlist zurück. Damit ist Dir wohl am schnellsten geholfen.

Ansonsten geb ich theo ja Recht, die haben so ihre Macken. Aber für so kleine Sachen sind sie nicht die schlechteste Wahl.

Man will ja auch mal was fertig kriegen und sich nicht in den Tiefen des Synapse-Quellcodes verlieren. Besonders schön lesbar ist der auch nicht gerade.

Aber das mit den Remarks ist ne alte Krankheit, die sie schreiben kennen die Tiefen ihres Codes, wer's nicht kennt sucht sich tot.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Über die Z39.50 Schnittstelle weiss ich nichts, bist du sicher dass die das HTTP unterstützt?

Die Unterschiede zwischen Indy und Synapse kann ich dir hier kurz schildern (meine Ansicht):

Indy wird in der IDE installiert. Du ziehst dir dann die unsichtbaren Komponenten auf ein Formular oder so und hast dann per Click die Properties und Events zur Verfügung.

Synapse besteht nur aus Units (Klassen). Du kannst also z.B. die verwendet Units in dein Projektverzeichns kopieren und fertig. Zukünftige Upgrades stören da nicht.
Bei Synapse läufts aber eher ohne Events ab (Ausnahme Sock.OnStatus).

Während Indy umfangreicher in der Unterstützung von allem Möglichen ist, konzentriert sich Synapse aufs wesentliche.

Synapse ist kompatibler zu allen von FPC unterstützen Plattformen, und unterstützt für Freepascal OpenSSL http://synapse.ararat.cz/wiki/index.php?page=SslPlugin

Es gibt eigenlich nichts, was du mit Synapse nicht machen kannst, aber manchmal ist etwas Handarbeit gefragt, während Indy eher vorgaukelt alles zu können aber - aus meiner Erfahrung - einige Bugs aufweist.

Ausserdem gibt es nicht immer den "one-best-way", wie Indy einen Glauben macht.

Kurz gesagt: Bei Synapse denkst du zuerst und dann lernst Du was und fühlst dich sicher. Bei Indy ist alles so schön einfach, bis es dich in den Hintern tritt und du in dem aufgeblasenen Code ziemlich hilflos dastehst.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

P.S.: Für einfache Sachen kannst du mit Synapse die "convenience Funktionen" verwenden z.B.:

function HttpGetText(const URL: string; const Response: TStrings): Boolean;
function HttpGetBinary(const URL: string; const Response: TStream): Boolean;
function HttpPostBinary(const URL: string; const Data: TStream): Boolean;
function HttpPostURL(const URL, URLData: string; const Data: TStream): Boolean;
function HttpPostFile(const URL, FieldName, FileName: string;
const Data: TStream; const ResultData: TStrings): Boolean;

Alle in unit httpsend.

Ein Beispiel wie man z.B. Formulardaten UND ein File gleichzeitig zu Server sendet findest du hier:

http://synapse.ararat.cz/wiki/index.php?page=HtmlForms

Mehr brauchst Du für den Anfang nicht.

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Prima theo,

aber warum heißt das ding dann httpsend? Kein halbwegs normaler Mensch hätte das Ding für receive im Verdacht.

Aber sei's drum, ich stell hier mal ne tiefgründige Betrachtung über OOP und Client-Server rein. Da wird seit 20 Jahren was völlig falsch verstanden. Anders kann man sich kaum erklären, das die meisten Programmierer noch heute glauben, die OOP sei vornehmlich für die Oberflächenentwicklung zu gebrauchen.

Das ist sie definitiv nicht. Die leistet weitaus mehr, letztlich läßt sich alles als Objekt definieren, auch ein Dateisystem.

Und einem widerspricht Synapse nun wirklich deutlich, nähmlich dem Grungedanken der productivity, genau dafür sind aber RAD-Tools wie lazarus und Delphi gedacht.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

schnullerbacke hat geschrieben:Prima theo,
aber warum heißt das ding dann httpsend? Kein halbwegs normaler Mensch hätte das Ding für receive im Verdacht.


Das stimmt, der Name ist bescheuert. Aber was wäre http send ohne receive?
Das ist vom Protokoll her schon gar nicht plausibel und so würde wohl jeder
halbwegs normaler Mensch annehmen, dass es einfach für HTTP ist.

schnullerbacke hat geschrieben:Aber sei's drum, ich stell hier mal ne tiefgründige Betrachtung über OOP und Client-Server rein. Da wird seit 20 Jahren was völlig falsch verstanden. Anders kann man sich kaum erklären, das die meisten Programmierer noch heute glauben, die OOP sei vornehmlich für die Oberflächenentwicklung zu gebrauchen.

Das ist sie definitiv nicht. Die leistet weitaus mehr, letztlich läßt sich alles als Objekt definieren, auch ein Dateisystem.
Ding für receive im Verdacht.

Ja, aber was hat das mit Synapse zu tun? Das sind genauso Klassen (OOP) wie Indy.
Nur die "convenience Funktionen" sind nach aussen hin Funktionen.
Du kannst gerne (und sollst) deine eigene Version von THTTPSend ableiten.

z.B. HttpGetText sieht intern so aus:

Code: Alles auswählen

function HttpGetText(const URL: string; const Response: TStrings): Boolean;
var
  HTTP: THTTPSend;
begin
  HTTP := THTTPSend.Create;
  try
    Result := HTTP.HTTPMethod('GET', URL);
    if Result then
      Response.LoadFromStream(HTTP.Document);
  finally
    HTTP.Free;
  end;
end;


schnullerbacke hat geschrieben:Und einem widerspricht Synapse nun wirklich deutlich, nähmlich dem Grungedanken der productivity, genau dafür sind aber RAD-Tools wie lazarus und Delphi gedacht.


Naja, ob Synapse nun als Komponenten in die IDE gehört ist eine andere Frage.
Ich persönlich halte nicht viel von nicht-visuellen Komponenten.
Das hat auch Nachteile, z.B. verschiedene Versionen oder bei der Weitergabe. Ich hasse es wenn ich tausend Komponenten installieren muss, um einen Code zu testen.

danny61
Beiträge: 94
Registriert: So 5. Nov 2006, 18:40
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Beitrag von danny61 »

Na, das scheint ja eine richtig philosophische Diskussion zu werden :)

Ich habe mich in der Zwischenzeit mal ein wenig mit den Dokus beschäftigt und bin von beiden Paketen erst einmal ziemlich Erschlagen.

Allerdings scheint mir die Synapse Doku doch um einiges übersichtlicher zu sein (auf den ersten Blick).

Gibt es für beide Pakete auch irgendwo brauchbare Dokus oder Tutorials auf Deutsch ?
Für eine komplette Einarbeitung in ein neues Thema wäre das doch hilfreich.

Das Argument, das für Netzwerkbibliotheken (die ja eh non-visual sind) keine Komponenten in Lazarus notwendig sind, kann ich übrigens ganz gut nachvollziehen. Aber das hängt sicherlich vom Funktionsumfang und der Architektur ab, die ich (noch) nicht kenne.

Wirklich weiter bin ich also immer noch nicht ;-?

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

danny61 hat geschrieben:Wirklich weiter bin ich also immer noch nicht ;-?


Lieber danny61, fang doch einfach mal an!
Hol dir die Synapse Units oder Indy und probier's aus.

Um ein paar Daten via HTTP mit Synapse oder Indy hin und her zu senden brauchst Du nicht zu promovieren. ;-)
Bzw. das Hauptproblem ist wahrscheinlich in der Z39.50 Schnittstelle, nicht in Synapse oder Indy.

Wenn du dann mehr Fragen hast kannst du gerne wieder hierher kommen

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

@schnullerbacke wenn du dich mit http ein wenig beschäftigst wird dir sehr schnell klar warum das httpsend heisst.
Das hat nichts mit bescheuert zu tun, http kann nämlich nur senden und bekommt immer daten zurück ob das nun ein OK eines posts ist oder die html seite aus einem get ist völlig egal. Und genauso flexibel ist httpsend hier ! Egal ob du Postes oder Get nimmst.

@Danny die dokumentation von synapse ist völlig ausreichend alle klassen sind gut dokumentiert es sind beispiele dabei was will man mehr.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

danny61
Beiträge: 94
Registriert: So 5. Nov 2006, 18:40
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Beitrag von danny61 »

So, ich habe mich mal ein wenig mit Synapse beschäftigt und bin natürlich sofort über das eine oder andere Problem gestolpert :)

Irgendwie habe ich mit HttpGetText einfach nicht das erwartete Ergebnis vom Server erhalten.
Daraufhin habe ich das ganze mal mit HttpMethod('Get',urlStr,ResultStr) gemacht.
Da habe ich dann anhand des Resultcodes und des Headers gesehen das der Server einen Redirect macht.
Muß ich die Umleitung selbst durchführen oder kann man Synapse veranlassen das automatisch zu händeln ?

Ich habe leider auch keine Möglichkeit gefunden die Mailingliste von Synapse durchsuchen zu lassen. Und mich schon wieder bei der nächsten Mailingliste anzumelden für so ein relativ triviales Problem hatte ich auch keine Lust :?
Gibt es irgendwo ein richtiges Forum für Synapse ?
thx

Antworten