Implementación del programa de comunicación cliente-servidor.
#include
#include
#include #include #include #include # definir TAMAÑO sizeof(struct sockaddr_in) int newsockfd; int main (int argc, char ** argv) { int sockfd; char c; /* Establecer el punto final de transmisión*/ if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) == -1) { p > perror ("falló la llamada al socket"); exit (1); } /* Inicializa el socket de Internet, el número de puerto es 7000 , y la dirección local se especifica como INADDR_ANY */ struct sockaddr_in server; server.sin_port = htons(7000); /*"Vincular la dirección del servidor al punto final*/ if (bind (sockfd, (struct sockaddr *) &server, TAMAÑO) == -1) { perror ( "falló la llamada de enlace"); exit (1) } /* Comienza a escuchar las conexiones entrantes*/ if (listen (sockfd, 5) == -1) { perror ("la llamada de escucha falló"); exit (1); salir (1); } for (;;) { /*Aceptar conexión*/ if (( newsockfd = aceptar (sockfd, NULL, NULL)) == -1) { perror ("aceptar llamada fallida" Continuar } p> /* Genera un proceso hijo para manejar la conexión*/ if (fork () == 0) { while (recv ( newsockfd, & .c, 1, 0) &g;c, 1, 0) > 0) { // podría usar read c = toupper (c); enviar (newsockfd, &c , 1, 0); } /* /* Cuando el cliente ya no envía información /* Genera un proceso hijo para manejar la conexión* / p> if (fork () == 0) { if (fork () == 0) { while (recv ( newsockfd, & c, 1, 0) > 0) Cuando el cliente ya no envía información el socket se puede cerrar y el proceso hijo finalizado */ cerrar (newsockfd); salir (0); } cerrar (newsockfd); } //cliente disponible para telnet