Zum Inhalt springen

Problem mit send() beim Server


HansChrisLuk

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...