Anda di halaman 1dari 2

/* serverfat.c Calcula o fatorial de um numero informado pelo cliente */ #include #include #include #include #include #include <stdio.h> <stdlib.

h> <sys/types.h> <sys/socket.h> <arpa/inet.h> <string.h>

long calcula_fatorial(int numero); int main(int argc, char** argv) { int socket_des, conexao, fromlen, sock_des_cli; struct sockaddr_in servidor, sock_cli; char msg_buffer[10]; long fatorial; // Testa os argumentos do main if (argc < 2) { fprintf(stderr,"USO: %s <porta>\n",argv[0]); exit(0); } // Cria um socket if ((socket_des = socket(AF_INET, SOCK_STREAM, 0)) < 0) { fprintf(stderr,"Erro ao criar o socket do servidor\n"); exit(0); } // Setup para conexao servidor.sin_family = AF_INET; servidor.sin_port = htons(atoi(argv[1])); servidor.sin_addr.s_addr = htonl(INADDR_ANY); //inet_addr("127.0.0.1"); bzero(&(servidor.sin_zero),8); // Ligacao do socket if (bind(socket_des,(struct sockaddr*)&servidor,sizeof(servidor)) < 0) { fprintf(stderr,"Erro de bind\n"); close(socket_des); exit(0); } // Prepara conexao if (listen(socket_des,3) < 0) { // Fila de espera de tamanho 3 fprintf(stderr,"Erro de listen\n"); exit(0); } else printf("Servidor pronto para conexoes....\n\n"); // Loop principal do servidor - servidor iterativo for ( ; ; ) { fromlen = sizeof(sock_cli); if ((sock_des_cli = accept(socket_des,(struct sockaddr*)&sock_cli,&fromlen)) < 0) { fprintf(stderr,"Erro de conexao...\n");

exit(0); } else { fprintf(stderr,"Cliente conectou...\n"); if (read(sock_des_cli,msg_buffer,sizeof(msg_buffer)) > 0) { fatorial = calcula_fatorial(atoi(msg_buffer)); sprintf(msg_buffer,"%ld",fatorial); write(sock_des_cli,msg_buffer,sizeof(msg_buffer)); } close(sock_des_cli); } } } long calcula_fatorial(int numero) { int i; long fatorial = 1; for (i = 2; i <= numero; i++) fatorial = fatorial * i; return fatorial; }

Anda mungkin juga menyukai