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

suzy

jogo em rede

12 mensagens neste tópico

:( Viva Malta!!

Ora bem, tenho de fazer um jogo em rede, no ambiente unix, ou seja, tenho de ter um cliente para a palntaform ubuntu e um servidor tb, e tenho de fazer que haja trocas de mensagens entre eles.

Para ja nao sei que jogo fazer, alguem tem alguma ideia?

Ja agora, tutoriais??

para começar tenho de fazer um programa udp, simples. ideias?

Obrigada

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Faz um jogo de perguntas tipo o "Quem quer ser milionário?".

O servidor era responsável por enviar as perguntas ao cliente, o cliente recebia a pergunta e mostrava ao utilizador, depois era enviada a resposta de novo para o servidor e aí validava ou não a resposta, respondendo afirmativo ou negativo ao cliente.

ja agora, vão ser sockets em C?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim os sockets sao em c

nao percebo nada de redes, tou agora a aprender, como faço para um cliente comunicar com o servido????

tava a pensar em fazer o jogo das damas

mas nao sei:(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao percebo nada de redes, tou agora a aprender, como faço para um cliente comunicar com o servido????

Certamente que vais abordar isso nas aulas, senão saca a 7ª edição da Revista PROGRAMAR que tens um artigo básico sobre sockets em C.

Quanto ao que vais fazer, só tu é tens de decidir.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No caso do jogo das damas então fazes a comunicação

- Do server para o cliente a dar o estado do tabuleiro.

- Do Cliente para o Server a dar a jogada para ser feita.

Com a restrição de aceitar 2 clientes que serão os jogadores. Ou então mais mas os restantes seriam apenas observadores e terias que fazer esse processamento extra.

Mas antes de começar estuda primeiro as sockets.

Fazer algo estilo hello world.

No lado do server estar à escuta num porto e kuando receber uma ligação enviar um texto (o Hello World) e do lado do Cliente imprimir o texto que receber do servidor no ecrã.

Simples, depois vais evoluíndo a partir daí.

No próximo passo em vez de mandar uma string pré definida manda a hora e data do momento, por exemplo. Assim já é uma string de tamanho variável e já testas como receber uma string que não sabes a partida quanto tamanho tem.

Depois o próximo passo é por do lado do servidor a aceitar mais do que 1 cliente. Ou seja, no momento da ligação criar uma thread e ser essa thread a tratar da ligação.

Seria mais fácil se fosse a criar uma processo filho, mas como vai ser um jogo de damas terá que ser por threads já que terá que haver partilha de estado (neste caso do estado do tabuleiro). Pensando nisso nem sei se implementares o jogo de damas será boa ideia, já que irás também ter que utilizar locks.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ui, utilizar locks, bem tou mesmo a leste. Queria fazer algo simples  :nono1:, mas de qualquer modo vou começar as estudar os sockets  e muito obrigada pela vossa ajuda  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:)hoje so faço perguntas. cá vai mais um duvida :wallbash:

tenho o ubuntu instalado como sistema operativo principal, e tenho uma maquina virtual que e o xp.

Para correr um programa em sockets em linux, posso fazer comunicaçao entre a maquina virtual (xp) e entre o ubuntu? ou so se pode fazer ligação entre o mesmo sistema operativo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, podes fazer entre os 2.

Não é assim tão linear, para Windows terias de te consumir a cabeça a adicionar bibliotecas manualmente. Eu já tentei fazer isso uma vez mas acabei por desistir.

Os sockets em linux usam determinadas bibliotecas do sistema que não existem em Windows, por isso à partida não dá para testar com o XP. Faz isso mas com uma máquina virtual de outro linux, assim tinhas 2 IPs para testar bem a tua aplicação. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ela perguntou se dava para fazer um chat Win <-> Lin, não perguntou se podia usar 1 código para ambos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tenho aqui a seguinte duvida, que vi num documento

Os exemplos simples apresentados a seguir ilustram a utilização destas "system-call", o primeiro envia "datagramas" UDP contendo uma linha de texto para a porta 8450 da máquina com endereço 193.136.62.4:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
void main(void)
{
struct sockaddr_in me, target;
int sock=socket(AF_INET,SOCK_DGRAM,0);
char linha[81];
bzero((char *)&me,sizeof(me));
me.sin_family=AF_INET;
me.sin_addr.s_addr=htonl(INADDR_ANY); /* endereço IP local */
me.sin_port=htons(0); /* porta local (0=auto assign) */
bind(sock,(struct sockaddr *)&me,sizeof(me));
bzero((char *)&target,sizeof(target));
target.sin_family=AF_INET;
/* endereço IP de destino */
target.sin_addr.s_addr=inet_addr("193.136.62.4");
target.sin_port=htons(8450); /* porta de destino */
do
    {
    gets(linha);
    sendto(sock,linha,81,0,(struct sockaddr *)&target, sizeof(target));
    }
while(strcmp(linha,"exit"));
close(sock);
}

O segundo exemplo recebe "datagramas" na porta 8450 e deverá ser usado na máquina com endereço 193.136.62.4 para recepção dos "datagramas" emitidos pelo programa anterior:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
void main(void)
{
struct sockaddr_in from, me;
int sock, addrlen=sizeof(me);
char linha[81];
sock=socket(AF_INET,SOCK_DGRAM,0);
bzero((char *)&me,addrlen);
me.sin_family=AF_INET;
me.sin_addr.s_addr=htonl(INADDR_ANY);
me.sin_port=htons(8450);
bind(sock,(struct sockaddr *)&me,addrlen);
do
    {
    recvfrom(sock,linha,81,0,(struct sockaddr *)&from, &addrlen);
    puts(linha);
    }
while(strcmp(linha,"exit"));
close(sock);
}

aqui estãse a utilizar o mesmo endereço nestes 2 problemas, nao deveria ser ip diferentes?? um para o servidor outro para o clienete?? nao tou a perceber

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

suzy, se o servidor e o cliente estiverem no mesmo PC têm IPs iguais.

Podes ter um servidor e um cliente a correr com o mesmo IP, mas normalmente têm IPs diferentes.

Nota que o servidor não necessita de conhecer o IP do cliente, pois vai estar sempre à espera de pedidos de clientes.

Já o cliente tem de conhecer obrigatoriamente a localização do servidor.

Mas se reparares bem, não há nada que diga no código do servidor que tem o mesmo IP que o cliente.

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