|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 06.01.2004, 19:27 Titel: Netzwerkfragen... |
|
|
Hier werden meine Netzwerkprogrammierfragen reinkommen...
Meine erste Frage bzw. Problem:
Will eine Datei/Seite aufrufen, dazu muss ich sie ja herunterladen...
geht aber nicht, weil ich die Seite z.B. meine Website www.newevolution.de/test aufrufen will, diese aber keine eindeutige IP hat.
Ich wandle diese Adresse um und kriege eine IP, dass ist aber nicht die IP zu der Seite sondern zu dem Server wo noch ganz viele andere Websiten gehostet werden...
also bringen meine nächste Aufrufe nicht mit GET ... Dateien herunterzuladen
hier etwas Code:
Code: |
// Downloaded das entsprechende File
// in diese Datei
int get_file(char* file,char* url)
{
char* site;
char* host;
char send_buf[256];
char recv_buf[256];
long rc;
FILE* target_file;
char uses_file=0;
char* write_ptr;
SOCKET s;
SOCKADDR_IN addr;
WSADATA wsa;
HOSTENT* hent;
if(WSAStartup(MAKEWORD(2,0),&wsa))
return -1;
addr.sin_family=AF_INET;
addr.sin_port=htons(80);
if(!(target_file=fopen(file,"wb")))
{
printf("Cannot open File ");
return -1;
}
uses_file=1;
if(strncmp("http://",url,7)==0)
host=url+7;
else
host=url;
if((site=strchr(host,'/'))!=0)
*site++='\0';
else
site=host+strlen(host); /* \0 */
printf("Host: %s\n",host);
printf("Site: %s\n",site);
printf("Connecting....\n");
if((addr.sin_addr.s_addr=inet_addr(host))==INADDR_NONE)
{
if(!(hent=gethostbyname(host)))
return -1;
strncpy((char*)&addr.sin_addr.s_addr,hent->h_addr,4);
if(addr.sin_addr.s_addr==INADDR_NONE)
return -1;
}
if((s=socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET)
return -1;
if( connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)))
return -1;
printf("Connected to %s...\n",host);
....
|
_________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Mazze JLI'ler
Alter: 39 Anmeldedatum: 02.01.2004 Beiträge: 145
Medaillen: Keine
|
Verfasst am: 06.01.2004, 21:31 Titel: |
|
|
Hi,
ganz einfach,die HTTP Anfrage sollte dann in etwas so aussehen:
GET /pfad/angabe HTTP/1.1\r\n
Host: diedomain.de\r\n
\r\n
\r\n |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 07.01.2004, 19:08 Titel: |
|
|
Mazze hat Folgendes geschrieben: | Hi,
ganz einfach,die HTTP Anfrage sollte dann in etwas so aussehen:
GET /pfad/angabe HTTP/1.1\r\n
Host: diedomain.de\r\n
\r\n
\r\n |
das geht überhaupt nicht, dann bleibt das Programm stehen, weil es keine Antwort vom Server kriegt
ich hatte das bis jetzt so gemacht:
Code: | sprintf(send_buf,"GET %s/%s HTTP/1.0\nUser-Agent: None\n\n",host,site); |
davon krieg ich wenisgtens bei oberen Beispiel den Auszug:
Zitat: | Bad Request
Your browser sent a request that this server could not understand.
Invalid URI in request GET www.newevolution.de/test/index.htm HTTP/1.0
--------------------------------------------------------------------------------
Apache/1.3.28 Server at www.sun-12.de Port 80 |
aber anscheinend kennst du dich auf dem Gebiet schon etwas aus? _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Mazze JLI'ler
Alter: 39 Anmeldedatum: 02.01.2004 Beiträge: 145
Medaillen: Keine
|
Verfasst am: 07.01.2004, 19:59 Titel: |
|
|
Hi
[quote]
Invalid URI in request GET www.newevolution.de/test/index.htm HTTP/1.0
[/quto]
Ich glaube das hängt damit zusammen das GET als Parameter nur den Pfad erwartet, du aber auch noch den Host mit angibst (was afaik so nur angeben wird wenn du über einen Proxy gehst...)
Versuchs dann mal so:
Code: |
sprintf(send_buf,"GET %s HTTP/1.0\nUser-Agent: None\nHost: %s\n\n",site,host);
|
Wichtig ist auch das der Pfad mit einem / anfängt..... |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 08.01.2004, 16:53 Titel: |
|
|
Mazze hat Folgendes geschrieben: | Hi
Code: |
sprintf(send_buf,"GET %s HTTP/1.0\nUser-Agent: None\nHost: %s\n\n",site,host);
|
Wichtig ist auch das der Pfad mit einem / anfängt..... |
^^Das hast du oben grade selber vergessen
aber vielen vielen Dank!!!
Es funktioniert!!!!
hat das davor immer so geschrieben:
Code: | sprintf(send_buf,"GET /%s HTTP/1.0\nUser-Agent: None\n\n",site);
|
jetzt so:
Code: | sprintf(send_buf,"GET /%s HTTP/1.0\nUser-Agent: None\nHost: %s\n\n",site,host); |
Das einzige Problem ist jetzt nur noch, dass für meinen kleinen "Minibrowser", dass man die Links entweder relativ oder exakt angeben kann. Das kann man nur prüfen, indem man schaut ob in dem Link die Haupt_Url drinnen ist oder nicht? _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 08.01.2004, 20:07 Titel: |
|
|
Da das jetzt einigermaßen gunt funktioniert, hab ich mal paar weitere Fragen
Wie kann man vor dem herunterladen von Dateien deren Größe erfahren? Wie das dieser "IE Standard Downloadmanager/assistent" macht?
Gibt es ein Tutorial wie ich so auch mich auf einem FTP-Server connecten kann und dort Befehle ausfürhen kann, wie alle Dateien im Verzeichnis sehen, Größe von Dateien bestimmen, und Dateien herunterladen bzw. hochladen kann?
Und wie ich die eigene Ip-Adresse (Internetip-adresse) von meinem Rechner bestimmen kann?
Ich such natürlich nebenbei noch selber ob ich das finde, hab aber bis jetzt noch nichts darüber gefunden...
Aber zum Glück kann man ja hier fragen. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Mazze JLI'ler
Alter: 39 Anmeldedatum: 02.01.2004 Beiträge: 145
Medaillen: Keine
|
Verfasst am: 08.01.2004, 21:24 Titel: |
|
|
Zu Größe vor dem Download:
Anstelle von GET einfach HEAD schicken, dann wird nur der Header Übertragen, wo es ein Feld namens Content-Type gibt...da erenthält die größe in Byte..
Das FTP-Protokoll ist da schon etwas komplexer, aber nicht viel.Das schwierigste ist der Verbindungsaufbau imho....die anderen Befehle sind die selben wie im Consolen-Client von Windows, falls du den schonmal benutzt hast....
Am besten schnappste dir nen Sniffer und lässt den mal alles aufzeichenen was so passiert, während du gerade ne FTP Verbindugn offen hast...damit lässt sich sowas idr. recht gut nachvollziehen!
Ansonsten sind da noch die RFCs (Requst for Comments;www.rfc-editor.org), da findest du die Spezifikationen zu FTP,IRC,HTTP uvm.
folgendes könnte für FTP ganz interessant sein:
ftp://ftp.rfc-editor.org/in-notes/rfc959.txt
.....vllt hab ich auch noch irgendwo ne uralte ftp klasse....
IP des eigenen Rechners:
hm...ich glaub das geht nur mit der Windows API ... ka
Zitat: |
Das kann man nur prüfen, indem man schaut ob in dem Link die Haupt_Url drinnen ist oder nicht?
|
hä? |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 16.01.2004, 17:15 Titel: |
|
|
Das hat ganz gut geklappt.
Aber jetzt kam das Problem, dass ich auch htaccess versehene Seiten öffnen, die ein Benutzernamen und Passwort brauchen.
Ich habe in der MSDN und in google gesucht, aber nichts dazu gefunden, nur mit PHP & Apache. Weiß einer wie das geht? Oder kennt einer von euch ein Programm wie ich die Sende Befehle vom Internet Explorer abfangen kann, damit ich mir das vielleicht abschauen kann? _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Mazze JLI'ler
Alter: 39 Anmeldedatum: 02.01.2004 Beiträge: 145
Medaillen: Keine
|
Verfasst am: 18.01.2004, 11:08 Titel: |
|
|
Hi,
Wie gesagt: Ein Sniffer sollte dir den gesamten Netzwerkverkehr an deiner Netzwerkkarte aufzeichnen. Für Windows gibts da z.b. auch TCPdump oder Ethereal(http://www.ethereal.com/). Auch nicht schlecht ist "SpyNet", aber ich glaube der kostet nen bisschen was... |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|