JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=28d20728e37d627fe672a006df7a9444Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Netzwerkfragen...

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 06.01.2004, 19:27    Titel: Netzwerkfragen... Antworten mit Zitat

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 Sad

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
Benutzer-Profile anzeigen Private Nachricht senden
Mazze
JLI'ler


Alter: 39
Anmeldedatum: 02.01.2004
Beiträge: 145

Medaillen: Keine

BeitragVerfasst am: 06.01.2004, 21:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 07.01.2004, 19:08    Titel: Antworten mit Zitat

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 Sad

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
Benutzer-Profile anzeigen Private Nachricht senden
Mazze
JLI'ler


Alter: 39
Anmeldedatum: 02.01.2004
Beiträge: 145

Medaillen: Keine

BeitragVerfasst am: 07.01.2004, 19:59    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 08.01.2004, 16:53    Titel: Antworten mit Zitat

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 Wink

aber vielen vielen Dank!!! Very Happy

Es funktioniert!!!! Smile

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
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 08.01.2004, 20:07    Titel: Antworten mit Zitat

Da das jetzt einigermaßen gunt funktioniert, hab ich mal paar weitere Fragen Razz

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...Sad
Aber zum Glück kann man ja hier fragen. Very Happy
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mazze
JLI'ler


Alter: 39
Anmeldedatum: 02.01.2004
Beiträge: 145

Medaillen: Keine

BeitragVerfasst am: 08.01.2004, 21:24    Titel: Antworten mit Zitat

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.... Wink


IP des eigenen Rechners:
hm...ich glaub das geht nur mit der Windows API ... ka Wink

Zitat:

Das kann man nur prüfen, indem man schaut ob in dem Link die Haupt_Url drinnen ist oder nicht?

hä? Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 16.01.2004, 17:15    Titel: Antworten mit Zitat

Das hat ganz gut geklappt. Very Happy

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
Benutzer-Profile anzeigen Private Nachricht senden
Mazze
JLI'ler


Alter: 39
Anmeldedatum: 02.01.2004
Beiträge: 145

Medaillen: Keine

BeitragVerfasst am: 18.01.2004, 11:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum