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
Guybrush Threepwood Geschrieben 4. November 2002 Autor Geschrieben 4. November 2002 CreateFile kann die Datei auch nicht finden.
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.
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.
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.
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?
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.
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?
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
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?
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.
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?
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.
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ß?
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.
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden