AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi [NonVCL, WinInet.InternetReadFile, PHP]: Wo kommt die 0 her?
Thema durchsuchen
Ansicht
Themen-Optionen

[NonVCL, WinInet.InternetReadFile, PHP]: Wo kommt die 0 her?

Ein Thema von Daniel Schuhmann · begonnen am 23. Feb 2006 · letzter Beitrag vom 24. Feb 2006
 
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#1

[NonVCL, WinInet.InternetReadFile, PHP]: Wo kommt die 0 her?

  Alt 23. Feb 2006, 22:08
Servus!

Ich habe ein sehr merkwürdiges Phänomen entdeckt und ich komme einfach nicht dahinter, warum das so ist. Die Geschichte ist allerdings auf einem zweiten Rechner reproduzierbar, an Zufälle glaube ich da nicht mehr.

Worum es geht:
Ich habe mir ein NonVCL-Programm geschrieben, das per HTTP ein PHP-Skript aufruft. Dieses Skript gibt die aktuelle Remote-IP zurück, kann eine übergebene IP in eine Textdatei speichern und diese später wieder ausgeben. Die "Steuerung" basiert hierbei auf HTTP-GET-Strings.

Das Problem:
Der ganze Krempel funktioniert wunderbar, solange die Verbindung über das Internet aufgebaut wird. Versuche ich das ganze lokal nachzustellen, so hängt mir die Funktion InternetReadFile immer eine 0 ans Ende der eingelesenen Daten. Zur Verdeutlichung: Es ist eine 0 als String und nicht etwa ein #0-Zeichen.

Der Code:
Zunächst einmal die Funktion LoadURL (diese habe ich im Forum gefunden und hatte bisher noch nie Probleme damit):

Delphi-Quellcode:
Uses Windows, WinInet;

function LoadURL(URL: String): String;
var
  IOpen, IURL: HINTERNET;
  Read: Cardinal;
  Msg: array[0..4095] of Char;
begin
  Result := '';
  try
    IOpen := InternetOpen(
               'Mozilla 3.0 (compatible)',
               INTERNET_OPEN_TYPE_PRECONFIG, '', '',
               INTERNET_FLAG_NEED_FILE
             );
    if IOpen <> nil then
    try
      IURL := InternetOpenUrl(IOpen, PAnsiChar(URL), nil, 0,
                INTERNET_FLAG_NO_UI, 0);
      if IURL <> nil then
      try
        repeat
          FillChar(Msg, SizeOf(Msg), 0);
          if InternetReadFile(IURL, @Msg[0], Pred(SizeOf(Msg)), Read) then
            Result := Result + Msg
          else
            Break;
        until Read = 0;
      finally
        InternetCloseHandle(IURL);
      end;
    finally
      InternetCloseHandle(IOpen);
    end;
  except
  end;
end;
Nochmal zur Verdeutlichung: Fehler im PHP-Skript kann man ausschließen. Übers Internet funktioniert alles richtig, und wenn ich das Skript lokal über den Browser öffne, läuft auch alles einwandfrei. Lese ich hingegen mit meinem Delphi-Programm, wird beim lokalen Betrieb die 0 angehängt, im Internet aber nicht.

Meine Frage(n) dazu: Woran liegt es, wie kann ich es umgehen/verhindern, wo ist mein (denk-)Fehler?

Zum besseren Verständnis noch der Projektcode und das PHP-Skript komplett als Anhang.

Hinweise:
  • Das PHP-Skript benötigt Schreibzugriff auf eine ip.txt im gleichen Verzeichnis.
  • Bei der Ausgabe steht jeweils vor der IP oder einer Meldung ein dreistelliger Code, dieser gibt an, ob der Befehl geklappt hat und ist eindeutig beabsichtigt.
  • Die INI-Datei zum Programm ist gerade auf lokalen Betrieb eingestellt. Zum Ausprobieren übers Internet bitte das Semikolon in die richtige Zeile verschieben bzw zum lokal testen die URL anpassen.

Zum Online-Testen liegt dasselbe Skript auch lauffähig unter http://zusitoolset.berlios.de/ip/ip.php (IP Anzeigen | IP 0.0.0.0 setzen | IP aus Datei lesen)
Angehängte Dateien
Dateityp: zip ipanzeige_126.zip (24,9 KB, 17x aufgerufen)
Daniel Schuhmann
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz