Below is an example of a simple client-server program in C. The client sends a number to the server, and the server determines whether the number is prime or not and sends the result back to the client
Server Code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <stdbool.h>
#define PORT 8080
bool is_prime(int num) {
if (num <= 1) return false;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) return false;
}
return true;
}
int main() {
int server_fd, new_socket;
struct sockaddr_in address;
int addrlen = sizeof(address);
char buffer[1024] = {0};
char response[1024];
// Create socket file descriptor
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("Socket failed");
exit(EXIT_FAILURE);
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
// Bind the socket to the network address and port
if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
perror("Bind failed");
close(server_fd);
exit(EXIT_FAILURE);
}
// Listen for incoming connections
if (listen(server_fd, 3) < 0) {
perror("Listen failed");
close(server_fd);
exit(EXIT_FAILURE);
}
printf("Server is listening on port %d...\n", PORT);
// Accept a connection
if ((new_socket = accept(server_fd, (struct sockaddr *)&address,
(socklen_t *)&addrlen)) < 0) {
perror("Accept failed");
close(server_fd);
exit(EXIT_FAILURE);
}
// Read data from the client
read(new_socket, buffer, 1024);
int number = atoi(buffer);
// Determine if the number is prime
if (is_prime(number)) {
snprintf(response, sizeof(response), "%d is a prime number.", number);
} else {
snprintf(response, sizeof(response), "%d is not a prime number.", number);
}
// Send the response back to the client
send(new_socket, response, strlen(response), 0);
printf("Processed request for number: %d\n", number);
// Close the sockets
close(new_socket);
close(server_fd);
return 0;
}
Client Code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define PORT 8080
int main() {
int sock = 0;
struct sockaddr_in serv_addr;
char buffer[1024] = {0};
char input[100];
// Create socket file descriptor
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("Socket creation error\n");
return -1;
}
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
// Convert IPv4 and IPv6 addresses from text to binary form
if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
printf("Invalid address/ Address not supported\n");
return -1;
}
// Connect to the server
if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
printf("Connection failed\n");
return -1;
}
printf("Enter a number: ");
scanf("%s", input);
// Send the number to the server
send(sock, input, strlen(input), 0);
// Read the response from the server
read(sock, buffer, 1024);
printf("Server: %s\n", buffer);
// Close the socket
close(sock);
return 0;
}
Instructions
- Compile the server and client programs:
- Start the server:
- In another terminal, run the client:
- Enter a number in the client terminal. The server will check if the number is prime and send the result back to the client.
Example Output
Server
Client
Comments
Post a Comment