Buscar

Jogo_Velha_RPC

Prévia do material em texto

UEMS - UNIVERSIDADE ESTADUAL DE MATO GROSSO DO SUL 
 
 
 
 
 
 
 
 
 
 
RELATÓRIO - JOGO DA VELHA RPC 
Ana Paula Correia 
Fábio Goulart 
 
 
 
 
 
 
 
 
 
 
 
DOURADOS - MS 
Agosto 2013 
SUMÁRIO 
 
Introdução ......................................................................................................... 03 
Desenvolvimento .............................................................................................. 04 
Conclusão/Discussão ........................................................................................ 06 
Bibliografia ....................................................................................................... 07 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
INTRODUÇÃO 
Nesse relatório iremos descrever alguns passos realizados para a implementação de um 
jogo da velha utilizando RPC (Remote Procedure Call) e sockets. 
Para tal, implementamos primeiramente a comunicação entre o servidor e o cliente. 
Logo após, implementamos o jogo, simples e sem RPC. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
DESENVOLVIMENTO 
Como foi dito antes, implementamos a comunicação entre o cliente e o servidor. O 
servidor aqui, aceitará duas conexões. Para tal, deve ser compilado e executado o código 
cliente.c duas vezes, um em cada terminal diferente. E o servidor será compilado e 
executado em outro terminal. 
Assim teremos três terminais abertos. 
O cliente se comunica com o servidor através de mensagens. E o servidor acusa o 
recebimento da mensagem. 
 
 printf("\nDIGITE UMA MENSAGEM PARA ENVIAR AO 
SERVIDOR:\n"); 
 //lendo entrada padrão 
 fgets(send_buffer, 32, stdin); 
 //se no inicio da string estiver o 'S' então esse é o 
ultimo loop 
 quit = send_buffer[0]; 
 
 //enviando uma string ao servidor. 
strlen(send_buffer) pode ser menor q 32 
 bytes = send(sockfd, send_buffer, 
strlen(send_buffer), 0); 
 if(bytes < 0) 
 { 
 perror("client_send:::"); 
 close(sockfd); 
 exit(1); 
 
 } 
 
 //só agora podemos ver a mensagem recebida do 
servidor 
 printf("\nRECEBIDO::: %s\n\n", recv_buffer); 
 
 } 
 
O servidor fica escutando a porta e esperando uma conexão. Como mostrado a seguir. 
/*O servidor aceitará no máximo apenas duas conexoes*/ 
 if(listen(sockfd, 2) < 0) 
 { 
 perror("server_listen:::"); 
 close(sockfd); 
 exit(1); 
 } 
 printf("\nAguardando por conexões na porta 
%s...\n\n", argv[1]); 
 
 /*aguardando por conexões*/ 
 new_sockfd = accept(sockfd, (struct sockaddr 
*)&client, &length); 
 if(new_sockfd < 0) 
 { 
 perror("server_accept:::"); 
 close(sockfd); 
 exit(1); 
 } 
 printf("\nAceitando conexão de %s\n\n", 
inet_ntoa(client.sin_addr)); 
 
 quit = 'N'; 
 while(quit != 'S') 
 { 
 bytes = send(new_sockfd, "SERVER:::ok!", 12, 0); 
 /*ocorreu um erro = -1*/ 
 if(bytes < 0) 
 { 
 perror("server_send:::"); 
 close(new_sockfd); 
 close(sockfd); 
 exit(1); 
 } 
 
O nosso jogo da velha foi implementado separadamente, um jogo simples. 
A dificuldade de nosso trabalho foi a junção dos dois códigos. Tentamos adicionar a 
variável que recebe a mensagem do cliente ao código da 'velha' que primeiramente 
havia sido implantado no código do servidor, mas não obtivemos sucesso. 
 
 
 
 
 
 
 
 
 
 
 
 
CONCLUSÃO/DISCUSSÃO 
Alguns testes foram feitos, porém sem sucesso. Implantar o código do jogo da velha ao 
código do servidor não funcionou. Nossa ideia de fazer a mensagem recebida do cliente 
funcionar como uma jogada era certa na teoria, mas na prática deu muitos erros de 
compilação. 
Ambos os códigos funcionam, porém separadamente. O cliente se comunica bem com o 
servidor. E o código somente do jogo também funciona bem. Houve muitos erros e 
warnings na compilação. Ficou decido mandar os códigos separados. O jogo da velha à 
parte e o cliente e servidor separado, pois ambos funcionam bem, mas na hora de juntar 
não conseguimos resultados satisfatórios. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
BIBLIOGRAFIA 
http://www-usr.inf.ufsm.br/~giovani/sockets/ 
http://www.inf.pucrs.br/~cnunes/redes_si/Sockets.htm

Continue navegando