#include #include #include #include #include #include #include #define PORT 8000 int main ( int argc, char* argv[] ) { // structs für die Aufnahme der IP-Adresse, etc von Server und Clientsockets struct sockaddr_in servaddr; struct sockaddr_in clientaddr; // Identifikatoren für Server / ClientSockets int sockfd, clientfd; // Pufferspeicher char buffer[1024]; // Erzeugen des Sockets als Internetsocket und SOCK_STREAM (TCP) if ((sockfd = socket (PF_INET, SOCK_STREAM, 0)) ==-1 ) { printf ("SOCKETOPEN FAILED\n"); exit(0); } // Serveraddressen setzen. (Port ist oben definiert, AF_INET => Internet, INADDR_ANY => über alle IP-Adressen memset( &servaddr, 0, sizeof( servaddr ) ); servaddr.sin_family = AF_INET; servaddr.sin_port = htons( PORT ); servaddr.sin_addr.s_addr = htonl( INADDR_ANY ); // binden des Sockets (also "scharfmachen" des Sockets) if (bind( sockfd, (struct sockaddr*) &servaddr, sizeof(servaddr) ) < 0) { printf ("SOCKETBIND FAILED\n"); close(sockfd); exit(0); } // beginn des lauschens if (listen ( sockfd, 10 ) < 0 ) { printf("LISTEN FAILED\n"); close( sockfd ); exit(0); } int x=sizeof(clientaddr); // warten auf Verbindung durch einen Client, danach Kommunikation über clientfd. clientfd = accept( sockfd, (struct sockaddr *) &clientaddr, &x ); // lesen aus dem Socket und direkt Ausgabe des Gelesenen auf der stdout read(clientfd, buffer, 1024); printf ("%s", buffer); // Puffer für die HTTP-Antwort char resp[]="HTTP/1.0 200 OK\nContent-Type: text/html\n\nHallo\n\n\n\0"; // Senden der Antwort write (clientfd, resp, sizeof(resp)); // Abbrechen der TCP-Verbindung shutdown (clientfd, 1); // Internes schließen des Clientsockets (Freigabe des Ports) close (clientfd); // Internes schließen des Serversockets close (sockfd); }