Veröffentlicht 4. November 200222 j 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
4. November 200222 j 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.
4. November 200222 j Autor 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.
4. November 200222 j 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.
4. November 200222 j Autor 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?
4. November 200222 j 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.
4. November 200222 j Autor 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?
4. November 200222 j Für Windows gibt es z.B. InternetReadFile: http://msdn.microsoft.com/library/en-us/wininet/wininet/internetreadfile.asp
4. November 200222 j Autor 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?
4. November 200222 j 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.
4. November 200222 j Autor 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?
4. November 200222 j 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.
4. November 200222 j Autor 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ß?
4. November 200222 j 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.
5. November 200222 j Autor 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
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.