// SERWER #include #include #include #include #include #include #include #define PORT_NUMBER 12345 #define BUFFER_SIZE 256 int main() { int server_socket, client_socket, address_length, pid; struct sockaddr_in server_address, client_address; char buffer[BUFFER_SIZE]; // create server socket server_socket = socket(AF_INET, SOCK_STREAM, 0); if (server_socket == -1) { perror("socket"); exit(EXIT_FAILURE); } // set server address memset(&server_address, 0, sizeof(server_address)); server_address.sin_family = AF_INET; server_address.sin_port = htons(PORT_NUMBER); server_address.sin_addr.s_addr = INADDR_ANY; // bind server socket to address if (bind(server_socket, (struct sockaddr *)&server_address, sizeof(server_address)) == -1) { perror("bind"); exit(EXIT_FAILURE); } // listen for incoming connections if (listen(server_socket, 5) == -1) { perror("listen"); exit(EXIT_FAILURE); } printf("Server listening on port %d...\n", PORT_NUMBER); while (1) { // accept incoming connection address_length = sizeof(client_address); client_socket = accept(server_socket, (struct sockaddr *)&client_address, &address_length); if (client_socket == -1) { perror("accept"); continue; } // fork new process to handle client request pid = fork(); if (pid == -1) { perror("fork"); exit(EXIT_FAILURE); } else if (pid == 0) { // child process // close server socket in child process close(server_socket); // read message from client memset(buffer, 0, BUFFER_SIZE); if (read(client_socket, buffer, BUFFER_SIZE) == -1) { perror("read"); exit(EXIT_FAILURE); } printf("Received message: %s\n", buffer); // send response to client if (write(client_socket, "Message received", 16) == -1) { perror("write"); exit(EXIT_FAILURE); } // close client socket in child process close(client_socket); // exit child process exit(EXIT_SUCCESS); } else { // parent process // close client socket in parent process close(client_socket); } } // close server socket close(server_socket); return 0; } // KLIENT #include #include #include #include #include #include #include #include #define SERVER_ADDRESS "localhost" #define PORT_NUMBER 12345 #define BUFFER_SIZE 256 int main() { int client_socket, result; struct sockaddr_in server_address; struct hostent *server; char buffer[BUFFER_SIZE]; // resolve server hostname server = gethostbyname(SERVER_ADDRESS); if (server == NULL) { fprintf(stderr, "Error: no such host: %s\n", SERVER_ADDRESS); exit(EXIT_FAILURE); } // create client socket client_socket = socket(AF_INET, SOCK_STREAM, 0); if (client_socket == -1) { perror("socket"); exit(EXIT_FAILURE); } // set server address memset(&server_address, 0, sizeof(server_address)); server_address.sin_family = AF_INET; memcpy(&server_address.sin_addr.s_addr, server->h_addr, server->h_length); server_address.sin_port = htons(PORT_NUMBER); // connect to server result = connect(client_socket, (struct sockaddr *)&server_address, sizeof(server_address)); if (result == -1) { perror("connect"); exit(EXIT_FAILURE); } // send message to server if (write(client_socket, "Hello, server", 14) == -1) { perror("write"); exit(EXIT_FAILURE); } // read response from server memset(buffer, 0, BUFFER_SIZE); if (read(client_socket, buffer, BUFFER_SIZE) == -1) { perror("read"); exit(EXIT_FAILURE); } printf("Received response: %s\n", buffer); // close client socket close(client_socket); return 0; }