1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Preciso de ajuda num programa em C

Discussão em 'Programação' iniciada por n0sk1ll, 27 de Fevereiro de 2007. (Respostas: 3; Visualizações: 1186)

  1. Ola a todos preciso de ajuda num programa de sockets em C:
    O enunciado e o seguinte:
    Objectivos:
    [FONT=ACOOGI+TimesNewRoman,Times New Roman]- Desenvolvimento de programas que envolvem comunicação entre processos em ambiente UNIX.

    - Familiarização com a criação e utilização de
    [/FONT][FONT=ACONOA+TimesNewRoman,Italic,Times New Roman]sockets [/FONT][FONT=ACOOGI+TimesNewRoman,Times New Roman].

    - Teste de valores de retorno das chamadas ao sistema, nomeadamente o controlo de erros.
    [/FONT]Programa a desenvolver [FONT=ACOOGI+TimesNewRoman,Times New Roman]([/FONT][FONT=ACONOA+TimesNewRoman,Italic,Times New Roman]findnum[/FONT][FONT=ACOOGI+TimesNewRoman,Times New Roman])[/FONT]:
    [FONT=ACOOGI+TimesNewRoman,Times New Roman]a. Desenvolver um programa que implemente um jogo em que se pretende adivinhar um número gerado aleatoriamente. O jogo consiste no seguinte:
    - O servidor gera um número aleatoriamente entre 1 e 100;
    - O cliente vai tentando adivinhar o número gerado no menor número de tentativas possível;
    - Caso o número indicado pelo cliente seja superior ao número a adivinhar, o servidor deve enviar a mensagem "
    [/FONT][FONT=ACONOA+TimesNewRoman,Italic,Times New Roman]Número demasiado alto[/FONT][FONT=ACOOGI+TimesNewRoman,Times New Roman]" e caso o número seja inferior deve enviar a mensagem "[/FONT][FONT=ACONOA+TimesNewRoman,Italic,Times New Roman]Número demasiado baixo[/FONT][FONT=ACOOGI+TimesNewRoman,Times New Roman]";
    - Quando o cliente adivinhar o número, o servidor deve felicitar o jogador e indicar o número de tentativas efectuadas.
    O jogador (cliente) poderá estar a jogar na mesma máquina em que está instalado o servidor ou não.
    Sempre que um jogador esteja a jogar e haja outro utilizador que pretenda jogar também, o servidor deverá notificar este utilizador informando que o servidor se encontra ocupado com outro jogador.
    Para valorizar o programa, procure desenvolver um interface amigável para o utilizador de forma a que o jogo se torne aliciante e fácil de jogar para utilizadores não experimentados em UNIX (podem utilizar a biblioteca
    [/FONT][FONT=ACONOA+TimesNewRoman,Italic,Times New Roman]curses.h [/FONT][FONT=ACOOGI+TimesNewRoman,Times New Roman]ou [/FONT][FONT=ACONOA+TimesNewRoman,Italic,Times New Roman]ncurses.h[/FONT][FONT=ACOOGI+TimesNewRoman,Times New Roman]).
    b. Permitir que o servidor possa jogar com um máximo de dois jogadores (clientes) em simultâneo.
    obrigado e um abraco
    [/FONT]
     
  2. HecKel

    HecKel The WORM

    E no meio disso tudo..., onde precisas de ajuda? Dúvidas concretas, de preferência.

    abraços, HecKel
     
  3. NINJA1200

    NINJA1200 [email protected] Member

    LOL! não deixa de ser cómico, para além de ser já hábito pelo que me tenho apercebido, de tentarem que alguém lhes faça os programas. As dúvidas concretas devem ser todas basicamente :D
     
  4. walterwolf

    walterwolf Power Member

    tipo, tens dois programas um cliente e outro servidor, executas do 2 programas e o servidor esta sempre a espera de receber algo do cliente(ciclos) quando o servidor recebe um dado, ele tenta resolver e manda um resultado para o cliente.

    mando-te dois codigos, um cliente e o outro servidor e que faz o seguinte:
    - o cliente manda uma string kualker e o servidor converte em maiuscula e manda para o cliente;

    Código:
    //cliente:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
     
     
    int main(void)
    {
    struct sockaddr_in target;
    int sock=socket(AF_INET,SOCK_STREAM,0);
    socklen_t adl=sizeof(target);
    char linha[81],linha2[81];
    bzero((char *)&target,adl);
    target.sin_family=AF_INET;
    target.sin_addr.s_addr=inet_addr("192.168.3.97");
    target.sin_port=htons(8450);
     
    if(-1==connect(sock,(struct sockaddr *)&target,adl))
    puts("Connect Failed");
    else
    do
    {
    gets(linha);
    write(sock,linha,81);
    read(sock,linha2,81);
    printf("Mensagem recebida so Servidor: %s\n", linha2);
     
    } while(strcmp(linha,"exit"));
    close(sock);
    }
     
     
     
    


    Código:
    //servidor:
     
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
     
    int main(void)
    {
         struct sockaddr_in me, from;
         int newSock,sock=socket(AF_INET,SOCK_STREAM,0);
         int i,letra;
         socklen_t adl=sizeof(me);
         char linha[81];
         bzero((char *)&me,adl); 
         me.sin_family=AF_INET;
         me.sin_addr.s_addr=htonl(INADDR_ANY);
         me.sin_port=htons(8450);
     
             if(-1==bind(sock,(struct sockaddr *)&me,adl))
             {
                     close(sock);puts("Porta ocupada");exit(1);
             }
                  listen(sock,5);
                  newSock=accept(sock,(struct sockaddr *)&from,&adl);
                  close(sock);
                  do 
                  {
                         read(newSock,linha,81);
                         puts(linha);
     
                         for(i=0;i<82;i++)
                         {
                                if (linha[i]!= '\n')
                                {
                                     letra=toupper(linha[i]); /*converte minusculas em maisculas*/
                                     linha[i]=letra;
                                }
                         } 
                         write(newSock,linha,81);
                         printf("Enviou Correcetamente\n");
                  } while(strcmp(linha,"exit"));
                      close(newSock);
    }
    
    ps:isso é em TCP
     

Partilhar esta Página