#include #include #include #include #include #include #include // Server starten: nc -lp1337 // Dann Client (dieses Programm) starten int main() { struct addrinfo *res; struct addrinfo hints = { .ai_family = AF_UNSPEC, .ai_socktype = SOCK_STREAM, .ai_flags = AI_ADDRCONFIG }; int status = getaddrinfo("localhost", "1337", &hints, &res); // Fehlerbehandlung if (status == EAI_SYSTEM) { perror("gai"); exit(1); } else if (status != 0) { fprintf(stderr, "%s\n", gai_strerror(status)); exit(1); } int sock; struct addrinfo* curr; for (curr = res; curr != NULL; curr = curr->ai_next) { sock = socket(curr->ai_family, curr->ai_socktype, curr->ai_protocol); if (sock < 0) { continue; } if (0 == connect(sock, curr->ai_addr, curr->ai_addrlen)) { break; } close(sock); } if (curr == NULL) { exit(1); // Fehlerbehandlung } FILE *rx = fdopen(sock, "r"); // Fehlerbehandlung int copy = dup(sock); // Fehlerbehandlung FILE *tx = fdopen(copy, "w"); // Fehlerbehandlung int upper = 2; int read; while ((read = fgetc(rx)) != EOF) { if (upper == 2) { if (read == 'u') { upper = 1; } else if (read == 'l') { upper = 0; } else { fprintf(tx, "Invalid char"); exit(EXIT_FAILURE); } continue; } if (upper) { fputc(toupper(read), tx); } else { fputc(tolower(read), tx); // FB } fflush(tx); // Fehlerbehandlung aller IO-Funktion } // Ressourcen freigeben }