Guybrush Threepwood Geschrieben 4. November 2002 Geschrieben 4. November 2002 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 Zitieren
Guybrush Threepwood Geschrieben 4. November 2002 Autor Geschrieben 4. November 2002 CreateFile kann die Datei auch nicht finden. Zitieren
Klotzkopp Geschrieben 4. November 2002 Geschrieben 4. November 2002 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. Zitieren
Guybrush Threepwood Geschrieben 4. November 2002 Autor Geschrieben 4. November 2002 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? Ich will die Datei einfach nur Binär öffnen. Zitieren
Klotzkopp Geschrieben 4. November 2002 Geschrieben 4. November 2002 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. Zitieren
Guybrush Threepwood Geschrieben 4. November 2002 Autor Geschrieben 4. November 2002 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? Zitieren
Klotzkopp Geschrieben 4. November 2002 Geschrieben 4. November 2002 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. Zitieren
Guybrush Threepwood Geschrieben 4. November 2002 Autor Geschrieben 4. November 2002 Wenn Du das wirklich von Hand machen willst, solltest Du Dir das HTTP-Protokoll ansehen, weil Du dann einen HTTP-Client schreiben musst. Dann wäre es glaube ich doch einfacher nen eigenenServer zu schreiben. Kannst du mir vielleicht ne andere Wrapperklasse nennen? Zitieren
Klotzkopp Geschrieben 4. November 2002 Geschrieben 4. November 2002 Für Windows gibt es z.B. InternetReadFile: http://msdn.microsoft.com/library/en-us/wininet/wininet/internetreadfile.asp Zitieren
Guybrush Threepwood Geschrieben 4. November 2002 Autor Geschrieben 4. November 2002 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? Zitieren
Klotzkopp Geschrieben 4. November 2002 Geschrieben 4. November 2002 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. Zitieren
Guybrush Threepwood Geschrieben 4. November 2002 Autor Geschrieben 4. November 2002 Das verstehe ich jetzt nicht der Server "lauscht" doch auf einem bestimmten Port ob eine Verbindungsanfrage besteht und der Client muß doch genau auf diesem Port versuchen eine Verbindung aufzubauen, oder nicht? Zitieren
Klotzkopp Geschrieben 4. November 2002 Geschrieben 4. November 2002 Doch, genauso ist es. Der Port, auf dem der Server lauscht, ist der Remote-Port Deines Clients. Welchen lokalen Port Dein Client verwendet, ist vollkommen egal. Zitieren
Guybrush Threepwood Geschrieben 4. November 2002 Autor Geschrieben 4. November 2002 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ß? Zitieren
Klotzkopp Geschrieben 4. November 2002 Geschrieben 4. November 2002 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. Zitieren
Guybrush Threepwood Geschrieben 5. November 2002 Autor Geschrieben 5. November 2002 Achso, na dann ist das auch klar. Ich dachte der Server sucht sich einen freien Port um keine anderen Programme zu behindern. Danke! Gruß Guybrush Zitieren
Empfohlene Beiträge
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.