COMPUTER NETWORKS EXPERIMENT-4
COMPUTER NETWORKS EXPERIMENT-4
EXPERIMENT – 4
Server code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main() {
int server_fd, client_fd;
struct sockaddr_in server_addr, client_addr;
socklen_t client_len = sizeof(client_addr);
char buffer[MAX_BUFFER], response[MAX_BUFFER];
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(PORT);
if (bind(server_fd, (struct sockaddr *)&server_addr,
sizeof(server_addr)) == -1) {
perror("Bind failed");
close(server_fd);
exit(EXIT_FAILURE);
}
if (listen(server_fd, 3) == -1) {
perror("Listen failed");
close(server_fd);
exit(EXIT_FAILURE);
}
printf("Client connected.\n");
while (1) {
memset(buffer, 0, sizeof(buffer));
int read_size = read(client_fd, buffer, sizeof(buffer));
if (read_size == 0) {
printf("Client disconnected.\n");
break;
}
char service = buffer[0];
char *message = buffer + 2;
switch (service) {
case '1':
find_first_last_letter(message, response);
break;
case '2':
find_digits(message, response);
break;
case '3':
{
char *semicolon_pos = strchr(message, ';');
if (semicolon_pos != NULL) {
*semicolon_pos = '\0';
char *message2 = semicolon_pos + 1;
combine_messages(message, message2,
response);
} else {
strcpy(response, "Invalid input for service 3.
Please enter two messages separated by a semicolon.");
}
}
break;
default:
strcpy(response, "Invalid service requested.");
break;
}
close(client_fd);
close(server_fd);
return 0;
}
Client Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
int main() {
int sock;
struct sockaddr_in server_addr;
char buffer[MAX_BUFFER];
char service;
char message[MAX_BUFFER];
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
printf("Connected to server.\n");
while (1) {
printf("\nSelect a service:\n");
printf("1: Find the first and last letter in the
message\n");
printf("2: Find the digits in the message\n");
printf("3: Combine two messages\n");
printf("Enter service number (or 'exit' to quit): ");
fgets(buffer, sizeof(buffer), stdin);
if (strncmp(buffer, "exit", 4) == 0) {
break;
}
service = buffer[0];
printf("Enter your message: ");
fgets(message, sizeof(message), stdin);
message[strcspn(message, "\n")] = 0;
memset(buffer, 0, sizeof(buffer));
int read_size = read(sock, buffer, sizeof(buffer));
if (read_size > 0) {
printf("Server response: %s\n", buffer);
}
}
close(sock);
return 0;
}
Output: