Programa cliente-servidor TCP para verificar si una string dada es Palindrome

requisitos previos:

Este artículo describe una configuración de Cliente y Servidor en la que un Cliente se conecta, envía una string al servidor y el servidor muestra la string original y envía una confirmación de si la string es un palíndromo o no, al cliente mediante una conexión de socket.

Ejemplos:

Input: naman
Output: Palindrome

Input: geek
Output: Not Palindrome

Enfoque :

  • En esto, primero configure una conexión cliente-servidor.
  • Cuando se establezca la conexión, el cliente enviará la string de entrada del usuario al servidor mediante la llamada al sistema de envío.
  • En el lado del servidor, el servidor esperará una string enviada por el cliente.
  • El servidor lee la string mediante la llamada al sistema de lectura.
  • Después de esto, el servidor verificará si la string es un palíndromo o no y enviará la confirmación al cliente.

Compilando:

  1. Primero, ejecute el programa del servidor como
    gcc server.c -o server
    ./server
  2. Ejecute el programa cliente en otro terminal
    gcc client.c -o client
    ./client
  3. El programa del servidor está esperando la string enviada por el cliente.
  4. Ingrese la string en el lado del cliente.
  5. El programa del servidor imprimirá la string original.
  6. El programa cliente imprimirá el resultado.

A continuación se muestra la implementación del enfoque anterior:

TCP Server

// 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);
}

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;
    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);
}

Producción:

  • Lado del servidor:

  • Lado del cliente:

Publicación traducida automáticamente

Artículo escrito por thakur_aman y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *