TCP Client-Server Program to Check if a Given String is Palindrome

02 Aug, 2019
Prerequisites:
Socket Programming in C/C++,
TCP and UDP server using select,
UDP Server-Client implementation in C
TCP Client-Server Implementation in C
This article describes a Client and Server setup where a Client connects, sends a string to the server and the server shows the original string and sends confirmation whether the string is a palindrome or not, to the client using socket connection.
Examples:
Input: naman
Output: Palindrome

Input: geek
Output: Not Palindrome

Approach:
In this, first set up a client-server connection.
When the connection will setup, the client will send the user input string to the server by the send system call.
At the server-side, the server will wait for a string sent by the client.
Server reads the string by the reading system call.
After this, the server will check if the string is a palindrome or not and sends the confirmation back to the client.
Compiling:
First, run the server program asgcc server.c -o server
./serverRun the client program on another terminalgcc client.c -o client
./clientServer program is waiting for the string sent by the client.Input the string in client-side.Server program will print original string.Client program will print result.
First, run the server program asgcc server.c -o server
./server
gcc server.c -o server
./server
Run the client program on another terminalgcc client.c -o client
./client
gcc client.c -o client
./client
Server program is waiting for the string sent by the client.
Input the string in client-side.
Server program will print original string.
Client program will print result.
Below is the implementation of the above approach:
TCP Server
TCP Client
// defines in_addr structure#include <arpa/inet.h>  // contains constants and structures// needed for internet domain addresses#include <netinet/in.h>  // standard input and output library#include <stdio.h>  // contains string functions#include <string.h>  // for socket creation#include <sys/socket.h>  // contains constructs that facilitate getting// information about files attributes.#include <sys/stat.h>  // contains a number of basic derived types// that should be used whenever appropriate#include <sys/types.h>  main(){    struct sockaddr_in client, server;    int s, n, sock, g, j, left, right, flag;    char b1[20], b2[10], b3[10], b4[10];      // creating socket    s = socket(AF_INET, SOCK_STREAM, 0);      // assign IP, PORT    server.sin_family = AF_INET;      // this is the port number of running server    server.sin_port = 2000;    server.sin_addr.s_addr = inet_addr("127.0.0.1");      // Binding newly created socket    // to given IP and verification    bind(s, (struct sockaddr*)&server, sizeof server);    listen(s, 1);    n = sizeof client;      sock = accept(s, (struct sockaddr*)&client, &n);    for (;;) {        recv(sock, b1, sizeof(b1), 0);          // whenever a request from a client came.        // It will be processed here.        printf("\nThe string received is:%s\n", b1);        if (strlen(b1) == 0)            flag = 1;        else {            left = 0;            right = strlen(b1) - 1;            flag = 1;            while (left < right && flag) {                if (b1[left] != b1[right])                    flag = 0;                else {                    left++;                    right--;                }            }        }        send(sock, &flag, sizeof(int), 0);        break;    }    close(sock);      // close the socket    close(s);}
// defines in_addr structure#include <arpa/inet.h>  // contains constants and structures// needed for internet domain addresses#include <netinet/in.h>  // standard input and output library#include <stdio.h>  // contains string functions#include <string.h>  // for socket creation#include <sys/socket.h>  // contains constructs that facilitate getting// information about files attributes.#include <sys/stat.h>  // contains a number of basic derived types// that should be used whenever appropriate#include <sys/types.h>  main(){    struct sockaddr_in client;    int s, flag;    char buffer[20];      // socket create    s = socket(AF_INET, SOCK_STREAM, 0);      // assign IP, PORT    client.sin_family = AF_INET;    client.sin_port = 2000;    client.sin_addr.s_addr = inet_addr("127.0.0.1");      // connect the client socket to server socket    connect(s, (struct sockaddr*)&client, sizeof client);      for (;;) {        printf("\nEnter a string to check palindrome: ");        scanf("%s", buffer);          printf("\nClient: %s", buffer);        send(s, buffer, sizeof(buffer), 0);        recv(s, &flag, sizeof(int), 0);          if (flag == 1) {            printf("\nServer: The string is a Palindrome.\n");            break;        }        else {            printf("\nServer: The string is not a palindrome.\n");            break;        }    }      // close the socket    close(s);}
Server Side:
Client Side:
cpp-multithreading
palindrome
C Programs
Computer Networks
palindrome
Computer Networks
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
C Program to read contents of Whole File
Producer Consumer Problem in C
Difference between break and continue statement in C
Exit codes in C/C++ with Examples
Handling multiple clients on server with multithreading using Socket Programming in C/C++
Layers of OSI Model
TCP/IP Model
Basics of Computer Networking
Differences between TCP and UDP
Types of Network Topology