Post on 21-Feb-2017
Programando seu jogo para rodar em rede
Kelvin Oliveira
V 1.0
• Primeiro, baixe o código em que me baseei para criar a struct Rede
• Lembrando que são dois códigos-fonte: um faz o papel de cliente e o outro, de servidor
• LINKS: CLIENTE | SERVIDOR
• Teste esses códigos no seu computador e procure compreende-los
• Com eles você pode fazer seu jogo funcionar em rede
• Agora, vou ensinar a usar struct que criei para modularizar o código do autor
Funções da struct Rede
bool WinSockInit();
void EncerraWinSock();
void FlagsInit();
bool ServerInit(int portaServidor);
bool ClientInit(char *ipServidor,int portaServidor);
bool RecebeDoClient();
bool EnviaParaOClient(char pacote[PACKET_MAX_SIZE]);
bool EnviaParaOServer(char pacote[PACKET_MAX_SIZE]);
bool RecebeDoServer();
bool AceitaConexaoClient();
bool ConectaServer();
bool FechaConexaoClient();
void FechaSocketClient();
void FechaSocketServer();
Vamos começar pelo inicio e pelo fim da utilização da biblioteca
Primeiro passo:
Utilize a função WinSockInit() no inicio da função main() do seu jogo
Último passo:
Utilize a função EncerraWinSock() no final da função main() e antes do “return 0;”
ANTES DE INICIALIZAR O SERVIDOR E OCLIENTE
Segundo passo:
Utilize a função FlagsInit() para inicializar as flags com um valor conhecido e padrão (false)
Terceiro Passo – Inicializando oscomponentes da rede
Esta inicialização dependerá da opção selecionada pelo jogador: ou cliente ou servidor...
Terceiro Passo – Inicialização do servidor
A inicialização do servidor é feita com a função ServerInit que recebe um parâmetro:
• A porta onde o servidor estará disponível (int)
• Ex: ServerInit(20131);
Terceiro Passo – Inicialização do cliente
A inicialização do cliente é feita com a função ClienteInit que recebe dois parâmetros:
• O IP do servidor
• A porta onde o servidor estará disponível (int)
• Ex: ClientInit(“127.0.0.1”,20131);
Quarto passo – Conexão entre cliente e servidor
Assim como no passo 3, cliente e servidor precisam fazer ações para que tudo ocorra corretamente.
Mas, agora as coisas são sequenciais. Primeiro, o servidor abre um socket de conexão e depois o cliente conecta-se ao socket.
Quarto passo – Servidor esperaa conexão do cliente
O servidor precisa ficar esperando uma conexão do cliente
Ele vai fazer absolutamente nada a não ser esperar pela conexão (tenha isso em mente)
Isso pode ser feito com a função AceitaConexaoClient() que retorna true quando o cliente se conectar ao socket
Quarto passo– Cliente conecta-seao servidor
Se o servidor está esperando a conexão do cliente, então o cliente pode se conectar ao socket do servidor
Utilize a função ConectaServer() para isso. Ele vai retornar true, caso a conexão ocorra.
Quinto Passo – Envie os Pacotes
- Cliente e servidor estão conectados. Portanto,você pode enviar dados do jogo. Para isso...
– Verifique o valor da variável clienteOuServidor que vai ser igual ou a “servidor” ou a “cliente” depedendo da função Init utilizada
Quinto Passo – Envie os Pacotes
– Se o elemento da rede for servidor, então utilize a função EnviaParaOClient() que recebe uma mensagem (pacote) como parâmetro
- Caso contrário, use EnviaParaOServer passando uma mensagem como parâmetro
Sexto passo – Receba os pacotes
– Utilize as funções RecebeDoCliente ou RecebeDoServerpara receber os pacotes. Quando retornar true, um novo pacote foi recebido
- Para verificar o conteúdo do pacote utilize:[nome_da_variavel].pacoteEx: minhaRede.pacote
Sexto passo – Receba os pacotes
– Assim como o servidor não faz nada a não ser esperarPela conexão do cliente, o recebimento dos pacotes é prioridade total para o servidor e para o cliente
- Eles só vão executar outras ações do jogo quando a função de receber pacotes retornar true (pacote chegou) ou false (erro de conexão entre os sockets)
Por enquanto é só isso.
Até a próxima versão do tutorial o/