Zum Inhalt springen

Öffnen einer Datei im Internet


Guybrush Threepwood

Empfohlene Beiträge

Hi,

ich möchte mit fopen eine Datei auf einem Server aus unserem Netzwerk öffnen.

Wenn ich den Netzwerkpfad angebe, also z.B. \\Rechner1\datei.txt, dann klappt es.

Aber wenn ich den Internetpfad angeben, z.B. http://Server/datei.txt, dann findet er

die Datei nicht.

Wie kann ich das über den Internetpfad machen?

Oder geht das mit fopen nicht?

Gruß

Guybrush

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kann auch nicht gehen. Keine normale Datei-API "spricht" HTTP. Obwohl Explorer/IE das so darstellen, als ob da kein wirklicher Unterschied bestünde, steckt ein ganz anderes Protokoll dahinter.

Wenn Du eine Datei über das HTTP-Protokoll laden willst, musst Du eine HTTP-Abfrage absetzen. Das geht entweder mit Sockets von Hand oder über eine der diversen HTTP-Wrapper-APIs.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Guybrush Threepwood

Achso, wenn ich das über Sockets machen will muß ich dann einen eigenen Server

schreiben oder gibt es da schon was mit dem ich die Verbindung aufbauen kann?

Nein, du musst "nur" den Client schreiben. Der Server ist der Webserver, auf dem die Datei liegt. Ich würde Dir aber wirklich empfehlen, einen HTTP-Wrapper zu verwenden, z.B. CHttpFile aus den MFC. Es gibt keinen Grund, das Rad neu zu erfinden.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde Dir aber wirklich empfehlen, einen HTTP-Wrapper zu verwenden, z.B.

CHttpFile aus den MFC. Es gibt keinen Grund, das Rad neu zu erfinden.

Im Prinzip geb ich dir Recht, aber ich programmier lieber ohne MFC.

Wenn ich das jetzt mit sockets machen würde, wie mach ich das dann am besten?

Normalerweise schickt der Server ja nach Verbindungsaufbau die Daten z.B. mit send()

zum Client der diese dann z.B. mit recv() empfängt. Aber ich kann den Webserver ja nicht

dazu bringen die Datei zu öffnen und mir Zeilenweise zusenden (das Ganze soll nämlich

ein Downloadprogramm werden), oder?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Guybrush Threepwood

Im Prinzip geb ich dir Recht, aber ich programmier lieber ohne MFC.

War ja nur ein Beispiel. Es gibt auch andere Wrapperklassen.

Wenn ich das jetzt mit sockets machen würde, wie mach ich das dann am besten?
Wenn Du das wirklich von Hand machen willst, solltest Du Dir das HTTP-Protokoll ansehen, weil Du dann einen HTTP-Client schreiben musst.

Normalerweise schickt der Server ja nach Verbindungsaufbau die Daten z.B. mit send() zum Client der diese dann z.B. mit recv() empfängt. Aber ich kann den Webserver ja nicht dazu bringen die Datei zu öffnen und mir Zeilenweise zusenden (das Ganze soll nämlich

ein Downloadprogramm werden), oder?

Zeilenweise wird das nicht gehen. Mit Partial Content kannst Du aber bestimmte Teile der Datei anfordern.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Bei dem Link kam "Host not found", aber egal da kuck ich später nochmal.

Nochmal zum Socketserver, du hast hier irgendwo mal geschrieben das wenn man als

Port 0 angiebt, das er sich dann einen freien sucht, aber woher weiß der Client dann welchen

Port er benutzen muß? Kann ich den irgendwie benennen so das ich den Namen bei der

Verbindung angeben kann?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Guybrush Threepwood

Bei dem Link kam "Host not found", aber egal da kuck ich später nochmal.

Hm, bei mir klappts...

Nochmal zum Socketserver, du hast hier irgendwo mal geschrieben das wenn man als Port 0 angiebt, das er sich dann einen freien sucht, aber woher weiß der Client dann welchen Port er benutzen muß?
Du musst zwischen dem lokalen und dem Remote-Port unterscheiden. Der Remote-Port muss 80 sein (oder was halt im URL steht), der lokale Port ist vollkommen egal, da solltest Du 0 angeben.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Guybrush Threepwood

Ja, das ist klar, aber wenn der Server sich selber einen freien Port sucht, wie weiß

ich dann welchen Port ich im Client für die Verbindung angeben muß?

Der Client sucht sich einen freien lokalen Port. Der lokale Port des Servers ist der Remote-Port des Clients und umgekehrt.

Server:

lokaler Port: 80

Remote-Port: juckt ihn nicht, da er die Verbindung nur annimmt.

Client:

Remote-Port: 80

lokaler Port: was grad frei ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...