Seite 1 von 1

readfile

Verfasst: 20.01.2007 20:33
von Dekontaminator
ja hallo
hab so nenen prob
will nen update checker machen
der soll eine datei im internet lesen und schauen ob ein neues update erforderlich ist
nur leider bin ich ein anfänger und redfile funktuiniert irgendwie bei dateien im inet nicht
kan mir jemand weiter helfen

Verfasst: 20.01.2007 20:56
von vonTurnundTaxis
So kann man eine Datei herunterladen. Du musst aber noch manuell zwischen dem Header und der eigentlichen Datei unterscheiden, was kein Problem sein sollte:

Code: Alles auswählen

 InitNetwork() 
 ID = OpenNetworkConnection("www.noname-development.de", 80) 
 Header.s + "GET /index.html HTTP/1.1" + #CRLF$ 
 Header.s + "Host: noname-development.de" + #CRLF$ 
 Header.s + "Accept: */*" + #CRLF$ 
 Header.s + "Connection: Close" + #CRLF$ + #CRLF$ 
 SendNetworkString(ID, Header.s) 
 
 *Buffer = AllocateMemory(20000) 
 Repeat 
 Until NetworkClientEvent(ID) = 2 
 ReceiveNetworkData(ID, *Buffer, MemorySize(*Buffer)) 
 CreateFile(1, "test") 
 WriteData(1, *Buffer, MemorySize(*Buffer)) 
 CloseNetworkConnection(ID)

Verfasst: 20.01.2007 21:35
von Dekontaminator
danke für deine hilfe waere lieb wenn du mir noch erklären könntest was ein header ist und so
und was ist #CRLF$

Verfasst: 20.01.2007 22:06
von rolaf
vonTurnundTaxis hat geschrieben:So kann man eine Datei herunterladen. Du musst aber noch manuell zwischen dem Header und der eigentlichen Datei unterscheiden, was kein Problem sein sollte:

Code: Alles auswählen

 InitNetwork() 
 ID = OpenNetworkConnection("www.noname-development.de", 80) 
 Header.s + "GET /index.html HTTP/1.1" + #CRLF$ 
 Header.s + "Host: noname-development.de" + #CRLF$ 
 Header.s + "Accept: */*" + #CRLF$ 
 Header.s + "Connection: Close" + #CRLF$ + #CRLF$ 
 SendNetworkString(ID, Header.s) 
 
 *Buffer = AllocateMemory(20000) 
 Repeat 
 Until NetworkClientEvent(ID) = 2 
 ReceiveNetworkData(ID, *Buffer, MemorySize(*Buffer)) 
 CreateFile(1, "test") 
 WriteData(1, *Buffer, MemorySize(*Buffer)) 
 CloseNetworkConnection(ID)
Ist das nicht ein wenig kompliziert (gerade für einen Anfänger) um eine Datei herunterzuladen? Sofern das Programm unter Windows erstellt wird (API) geht es einfacher, nämlich so:

Code: Alles auswählen

DeleteUrlCacheEntry_("http://www.dudeldudel.de/update.txt")
URLDownloadToFile_(0, "http://www.dudeldudel.de/update.txt", "c:\update.txt", 0, 0)
Grüß Gott

Verfasst: 20.01.2007 22:38
von vonTurnundTaxis
> Ist das nicht ein wenig kompliziert (gerade für einen Anfänger)
Nein, denn so lernt er, HTTP-Server anzusprechen...
Und Programmieren ohne Verstehen ist doch nicht was wir hier fördern möchten, oder? Dafür gibts den GameMaker.

> ein header ist und so
Ein Header ist ein Dateikopf (so etwas ähnliches wie ein Briefkopf). Dieser Header hängt an den heruntergeladenen Dateien dran (probiers einfach mal aus :wink: )

> und was ist #CRLF$
Das ist eine Zeilenumbruchs-Konstante...

Verfasst: 21.01.2007 04:48
von rolaf
vonTurnundTaxis hat geschrieben:Und Programmieren ohne Verstehen ist doch nicht was wir hier fördern möchten, oder?
Bei so hohen Ansprüchen wäre dann aber auch eine bessere Dokumentation des Codes nötig. :allright:

Grüß Gott

Verfasst: 21.01.2007 13:00
von vonTurnundTaxis
> Bei so hohen Ansprüchen wäre dann aber auch eine bessere Dokumentation des Codes nötig.
Tot uw dienst :wink:

Code: Alles auswählen

 InitNetwork(); Initialisiert die Netzwerk-Befehle; ist nötig, um Netzwerk-Befehle zu verwenden
  ID = OpenNetworkConnection("www.noname-development.de", 80); Öffnet eine Verbindung zum Server www.noname-development.de. hier könnte auch eine IP stehen.
  Header.s + "GET /index.html HTTP/1.1" + #CRLF$ ;Hier wird der GET-Header zusammengestellt, der an den Server gesendet wird. Siehe auch hier: http://de.wikipedia.org/wiki/HTTP#HTTP_GET
  Header.s + "Host: noname-development.de" + #CRLF$ 
  Header.s + "Accept: */*" + #CRLF$ 
  Header.s + "Connection: Close" + #CRLF$ + #CRLF$ 
  SendNetworkString(ID, Header.s) 
   
  *Buffer = AllocateMemory(20000); Hier werden 20000 Bytes im Arbeitsspeicher  reserviert, um die Datei darin aufzunehmen.
  Repeat 
  Until NetworkClientEvent(ID) = 2 
  ReceiveNetworkData(ID, *Buffer, MemorySize(*Buffer)); Hier wird die Antwort des Servers in den reservierten Bereich im RAM gespeichert...
  CreateFile(1, "test") 
  WriteData(1, *Buffer, MemorySize(*Buffer)) ;...und hier in eine Datei geschrieben
  CloseNetworkConnection(ID)