lnet http in konsolenanwendung..

Alle Fragen zur Netzwerkkommunikation
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

lnet http in konsolenanwendung..

Beitrag von corpsman »

Guten morgen allerseits,

Ich bin gerade dabei eine kleine Anwendung für den Raspberry Pi zu basteln. Es geht darum dass meine Konsolenanwendung folgenden Link aufruft :

http://corpsman.de/ip_info.php

und das Ergebniss dann weiter verarbeitet. Also habe ich alles notwendige auf dem Pi installiert.

Nun ist es so, dass wenn ich eine Visuelle Anwendung mache und alles ausführe es funktioniert ( auf dem Pi wie meinem Laptop )
in der Consolenanwendung scheint die Lnet Komponente aber leider keine antwort zu bekommen ( effektiv kann ich aber auch nicht sagen ob sie überhaupt sendet )

Habt ihr noch eine Idee ?

Da ich keine Dateien anhängen kann, irgendwas mit SQL-Fehler der Quelltext im Post :

Code: Alles auswählen

Program self_dns;
 
{$MODE objfpc}{$H+}
 
Uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
{$ENDIF}{$ENDIF}
  sysutils,
  Classes, lnetbase, lHTTPUtil, lhttp
  { you can add units after this };
 
Type
 
  { TDummy }
 
  TDummy = Class
  public
    Function LHTTPClientComponent1Input(ASocket: TLHTTPClientSocket;
      ABuffer: PChar; ASize: integer): integer;
  End;
 
Var
  receivedIP: String;
  received: Boolean;
 
  { TDummy }
 
Function TDummy.LHTTPClientComponent1Input(ASocket: TLHTTPClientSocket;
  ABuffer: PChar; ASize: integer): integer;
Var
  s: String;
Begin
 
  setlength(s, ASize);
  move(ABuffer^, s[1], ASize);
  receivedIP := trim(s);
  writeln(receivedIP);
  received := true;
  Result := 0;
End;
 
Var
  html: TLHTTPClient;
  dummy: TDummy;
  aHost, aURI: String;
  aPort: word;
  Url: String;
 
Begin
  writeln('Detecting the global IP-address...');
  dummy := TDummy.Create;
  html := TLHTTPClient.Create(Nil);
  html.Method := hmGet;
  html.Port := 80;
  html.OnInput := @dummy.LHTTPClientComponent1Input;
  received := false;
 
  writeln('created.');
 
  (*
   Auf http://www.Corpsman.de ist eine PHP Datei die macht folgendes :
 
    <?php
    echo $_SERVER['REMOTE_ADDR'];
    ?>
   *)

  url := 'http://corpsman.de/ip_info.php';
  DecomposeURL(URL, aHost, aURI, aPort);
  html.Host := aHost;
  html.URI := aURI;
  html.Port := aPort;
  html.SendRequest;
  While Not received Do Begin
    Sleep(1);   //           hier bleibt die Anwendung stehen, weil received nie true wird ..
  End;
  writeln('Received global ip : ' + receivedIP);
 
  html.free;
  dummy.free;
End.
 
--
Just try it

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

Re: lnet http in konsolenanwendung..

Beitrag von theo »

Warum nicht einfach Synapse nehmen? Ist dort ein Einzeiler:

http://synapse.ararat.cz/doc/help/httpsend.html

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: lnet http in konsolenanwendung..

Beitrag von corpsman »

hast du mir ne Installationsanleitung für Synapse und den PI ?

ich hab nich mal synaser auf dem Pi zum laufen gebracht..
[Edit]
Ich nehm alles zurück, nach einem erneuten versuch gehts mit synapse.

Danke für den Hinweis.
--
Just try it

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: lnet http in konsolenanwendung..

Beitrag von mschnell »

theo hat geschrieben:Warum nicht einfach Synapse nehmen? Ist dort ein Einzeiler:

http://synapse.ararat.cz/doc/help/httpsend.html


HTTP und POP3 Client funktionieren bei mir in einer Konsolen-Anwendung mit Synapse prima. Auch auf ARM.

Es war allerdings etwas anstrengend bis ich es auf ARM am Laufen hatte.

Und dann ist da noch ein "undokumentiertes Feature" von httpsend: Wenn man dieselbe Instanz mehrfach verwendet, werden die vorher empfangenen Daten in der Anfrage an den Server gesendet, falls man den Puffer nicht explizit löscht.

-Michael

Antworten