readfile

Anfängerfragen zum Programmieren mit PureBasic.
Dekontaminator
Beiträge: 10
Registriert: 15.01.2007 16:32

readfile

Beitrag 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
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag 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)
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
Dekontaminator
Beiträge: 10
Registriert: 15.01.2007 16:32

Beitrag 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$
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag 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
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag 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...
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag 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
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag 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)
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
Antworten