Baixe o app para aproveitar ainda mais
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
Compartilhar