requisitos previos:
- Programación de sockets en C/C++ ,
- Servidor TCP y UDP usando select ,
- Implementación Servidor-Cliente UDP en C
- Implementación Cliente-Servidor TCP en C
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:
- Primero, ejecute el programa del servidor como
gcc server.c -o server ./server
- Ejecute el programa cliente en otro terminal
gcc client.c -o client ./client
- El programa del servidor está esperando la string enviada por el cliente.
- Ingrese la string en el lado del cliente.
- El programa del servidor imprimirá la string original.
- 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:
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