/** * Socket-Server programmieren. * * Schreiben Sie einen Socket-Server, der auf 127.0.0.1 * und Port 8080 lauscht. Wenn sich ein Client verbindet, * liest der Server eine Zeichenfolge vom Client und sendet * dann den Text "Hello, " + Zeichenfolge + "!" zurück an * den Client. */ #include #include #include #include #include #include #include #define PORT 8080 #define BUFFER_SIZE 1024 int main() { int server_fd, new_socket; struct sockaddr_in address; int addrlen = sizeof(address); char name[BUFFER_SIZE - 20]; char answer[BUFFER_SIZE]; memset(name, 0, sizeof(name)); // Socket erstellen server_fd = socket(AF_INET, SOCK_STREAM, 0); if (server_fd == -1) { perror("Fehler beim Erstellen des Sockets"); exit(EXIT_FAILURE); } // Adresse konfigurieren address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(PORT); // Socket an Port binden if (bind(server_fd, (struct sockaddr*)&address, sizeof(address)) == -1) { perror("Fehler beim Binden des Sockets"); exit(EXIT_FAILURE); } // Auf Verbindungen lauschen if (listen(server_fd, 1) == -1) { perror("Fehler beim Lauschen auf Verbindungen"); exit(EXIT_FAILURE); } printf("Server läuft und lauscht auf Port %d\n", PORT); // Auf Verbindung warten und Nachricht senden while ((new_socket = accept(server_fd, (struct sockaddr*)&address, (socklen_t*)&addrlen))) { if (new_socket == -1) { perror("Fehler beim Akzeptieren der Verbindung"); exit(EXIT_FAILURE); } // Namen lesen ssize_t len = read(new_socket, name, BUFFER_SIZE - 20); if (len < 0) { perror("Fehler beim Lesen"); exit(EXIT_FAILURE); } snprintf(answer, BUFFER_SIZE, "Hello, %s!\n", name); write(new_socket, answer, strlen(answer)); } // Verbindung schließen close(new_socket); close(server_fd); return 0; }