HansChrisLuk Geschrieben 31. Dezember 2006 Geschrieben 31. Dezember 2006 Hi, ich programmiere gerade einen Server, allerdings klappt es noch nicht ganz mit den Daten senden (bzw. manchmal klappt es und manchmal wieder nicht). Einmal wird eine Seite aufgebaut, allerdings mit sehr viel zufälligen Zeichen und manchmal passiert einfach gar nicht. Woran liegt das? void main () { SOCKET sock; SOCKET sock2; struct sockaddr_in server; struct sockaddr_in client; char text[256]="<html><head><title>Fachbereich Mathematik </title></head><body><h1>Mein neuer Fachbereich </h1>\0"; int len; WSADATA wsa; if (WSAStartup(MAKEWORD(1 ,1), &wsa)){ printf("WSAStartup() failed"); } sock = socket( AF_INET, SOCK_STREAM, 0 ); /*Falls Initialisierung fehlgeschlagen liefert socket -1*/ if (sock < 0) { printf("Fehler beim Erzeugen des Sockets"); } memset( &server, 0, sizeof (server)); // IPv4-Adresse server.sin_family = AF_INET; // Jede IP-Adresse ist gültig server.sin_addr.s_addr = htonl( INADDR_ANY ); // Portnummer 8080 server.sin_port = htons( 8080 ); if(bind( sock, (struct sockaddr*)&server, sizeof( server)) < 0) { printf("FEHLER bei bind()"); } if( listen( sock, 5 ) < 0 ) { printf("FEHLER bei listen()"); } for(; { len = sizeof( client ); sock2 = accept( sock, (struct sockaddr*)&client, &len); if (sock2 < 0) { printf("FEHLER bei accept()"); } // Hier beginnt der Datenaustausch if( send(sock2,text,strlen(text),0 ) < 0 ) { printf("FEHLER bei send()"); } fprintf(stdout,"SEND"); } closesocket(sock); closesocket(sock2); WSACleanup(); } [/code] Und da habe ich gleich noch eine andere Frage: Wie mache ich es mit der index.html, kann ich dem Client einfach einen Link zu der Dtei schicken, oder liest der Server diese aus und sendet sie dann mit send()? Vielen Dank und einen guten Rutsch in ein neues Jahr... Gruß Chris Zitieren
Klotzkopp Geschrieben 31. Dezember 2006 Geschrieben 31. Dezember 2006 Was versuchst du da überhaupt? :confused: Falls das ein Webserver werden soll: Es reicht nicht, einfach nur unaufgefordert nacktes HTML als Text zu verschicken. Du musst schon das Protokoll (HTTP) implementieren. Wie sieht der Client aus? Zitieren
HansChrisLuk Geschrieben 2. Januar 2007 Autor Geschrieben 2. Januar 2007 Hallo, also einen Client habe ich nicht programmiert. Ich möchte einfach mit einem Browser (z.B. IE7) den Server über http://localhost:8080/index.html "anrufen". Vorher gebe ich beim Start des Serves noch an, wo sich die index.html-Datei befindet, die er senden soll. Also ich muss noch das HTTP-Protocal einbinden? Und wie mach ich das dann mit er index.html? :uli Gruß&Dank Chris Zitieren
Klotzkopp Geschrieben 2. Januar 2007 Geschrieben 2. Januar 2007 Also ich muss noch das HTTP-Protocal einbinden?Nicht "einbinden", implementieren. Du musst den Serverteil dieses Protokolls in deinem Programm umsetzen. Das HTML sind nur die Nutzdaten. Der Client (Browser) schickt eine HTTP-Anfrage an deinen Server. Die musst du auswerten und entsprechend beantworten. Wenn es immer nur diese eine Datei ist, kannst du dir das Auswerten natürlich theoretisch schenken. Trotzdem solltest du schon warten, bis der Client seine Anfrage abgesetzt hat. Zitieren
Guybrush Threepwood Geschrieben 2. Januar 2007 Geschrieben 2. Januar 2007 Ich weiß ja nicht genau was du vor hast, aber ich denke das du dich da ein klein wenig übernommen hast Für einen kleinen Überblick solltest du mal Hypertext Transfer Protocol - Wikipedia lesen. Zitieren
HansChrisLuk Geschrieben 2. Januar 2007 Autor Geschrieben 2. Januar 2007 Also was ich machen möchte ist folgendes: Aufgabe: Implementieren Sie in C einen einfachen Webserver. Das Programm soll als Kommandozeilenparameter eine Portnummer und ein Arbeitsverzeichnis erhalten und auf dem angegebenen Port auf einfache HTTP GET-Anfragen warten und diese korrekt bearbeiten. Der Arbeitsverzeichnisparameter soll angeben, an welcher Stelle im lokalen Dateisystem sich die HTML Seiten befinden. Geben Sie geeignete Ausgaben über die Abläufe innerhalb Ihres Webservers auf stdout aus, um die Funktionsweise zu verdeutlichen. Testen Sie Ihren Webserver durch geeignete Aufrufe durch einen gängigen Webbrowser, z.B. der URL Default PLESK Page, falls Ihr Webserver auf Port 8080 auf Verbindungen wartet. So, das möchte ich erreichen :eek Also bisher habe ich nach Wiki&Co so viel verstanden, dass ich vom Client eine Get-Anfrage bekomme GET /index.html HTPP/1.1 Host: localhost:8080 So, und dann schickt der Server die Datei: HTTP/1.1 200 OK Date: Tue, 28 Nov 2006 21:32:18 GMT Server: Apache Last-Modified: Sat, 10 Dec 2005 16:31:53 GMT ETag: "4814c-1914-439b02f9" Accept-Ranges: bytes Content-Length: 6420 Connection: close Content-Type: text/html; charset=iso-8859-1 <html><head><title>Fachbereich</title></head><body><h1>Fachbereich</h1>... So, und da dachte ich, ich schicke einen String einfach per send(), war wohl falsch. Aber ich weiß trotzdem leider noch nicht, wie ich es übermittle... :confused: Gruß hans Zitieren
Klotzkopp Geschrieben 2. Januar 2007 Geschrieben 2. Januar 2007 So, und da dachte ich, ich schicke einen String einfach per send(), war wohl falsch.Nein, das war schon richtig. Aber du hast die Anfrage nicht ausgewertet (da steht drin, was du schicken sollst), und hast nur den HTML-Teil gesendet. 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.