• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

dianaalbano

O que está mal?

3 mensagens neste tópico

Boas noites

Preciso de ajuda num código. Não sei o que está mal.

while(1)
{
	if(nPlayers<4)
	{
		if((arraySockets[nPlayers]=newsocket=accept(socketGamePlayer,(struct sockaddr *)&cli_addr,(socklen_t *)&cliaddr_len) )==-1){
			printf("Impossibilidade de aceitar jogadores\n");
			exit(0);
		}
	}
	//else
	//{
		switch(fork())
		{
			case -1:printf("Impossivel atender jogadores\n");
				close(newsocket);
				break;
			case 0: if(nPlayers>4)
					exit(EXIT_SUCCESS);
				else{
					close(socketGamePlayer);
					atendeJogador(newsocket);
					exit(EXIT_SUCCESS);
				}
			default:sleep(5);
				if(nPlayers==4)
				{	
				printf("Existe(m) %d jogador(es) a aguardar inicio do jogo\n", nPlayers);
				iniPlayer=nPlayers-2;

				//Envia um GAME_START REQUEST aos jogadores j�logados
				for(i=0;i<nPlayers;i++)
				{
					strcpy(buffer, gameStartRequest(i+1, "INICIAR", nPlayers, nPlayers, iniPlayer));
					aux=strlen(gameStartRequest(i+1, "INICIAR", nPlayers, nPlayers, iniPlayer));
					if(write(arraySockets[i], buffer, aux+1) != aux+1){
						printf("Erro ao enviar o socket para o jogador\n");
						close(arraySockets[i]);
						exit(0);
					}
					//Espera pela confirma�o do jogador que est�pronto para come�r o jogo, ou seja, GAME_START REPLY
					if((nbytes=readL(arraySockets[i], buffer, BUFFERSIZE)) < 0){
						printf("Erro ao ler do socket\n");
						close(arraySockets[i]);
						exit(0);
					}
					puts("Recebi do jogador\n\n");
					puts(buffer);

					xmlParseMessagePG((const xmlChar *)buffer);

					if(strcmp(ArrayMensagem[2*TAMMSG], "PRONTO")==0)
						playersOK++;
					sleep(2);
				}
				puts("ja estao tds ok e ia jogar");
				//jogo(arraySockets, playersOK, iniPlayer);
				}
			nPlayers++;
			//close(newsocket);
			break;
		}
	//}
	//}
}

}	

Este código deveria fazer o seguinte:A partir do ciclo for(), este codigo que e o servidor de uma aplicaçao cliente-servidor TCP, deveria comunicar c os varios clientes q estao ligados, m ao enviar a mensagem (XML) q deve aos jogadores, ele guarda essa mensagem em buffer e depois ao ler a resposta dos jogadores n a leu, m le o q enviou ao jogadores...PK???

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se puderes colocar aí o código completo, é capaz de ajudar na resposta!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu acho que e por causa do while(1) a condição esta mal defendia poderia ser tipo nPlayers< 100; claro que andes de entrares no while tem de inicializar a variavel

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora