Ir para conteúdo
Fórum Script Brasil
  • 0

Fazendo Um Despertador


neotheone

Pergunta

Fala pessoal eu já dei inicio ao meu trabalho da faculdade que consiste em fazer uma fila de despertadores, vou explicar. O Cliente chega e digita e conecta a maquina servidora, daí ele digita SET 5 ( isso corresponde a ser acordado daqui a 5 segundos.

Gostaria que se vocês pudessem dessem uma olhada no meu codigo Cliente / Servidor abaixo;

servidor:

#include <sys/types.h>

> #include<sys/socket.h>

> #include<unistd.h>

> #include<netinet/in.h>

> #include<stdio.h>

>

> #define MAXFILA 10

> struct timer{

>

> int tempo[MAXFILA];

> int inic;

> };

>

> int main(int argc, char **argv)

> {

>

> struct timer *t;

> int listenfd, connfd, size;

> struct sockaddr_in myaddr, cliaddr;

> int bufsize=128;

> char *cmd;

>

>

> listenfd=socket(AF_INET, SOCK_STREAM, 0); // cria o socket

> memset(&myaddr,0, sizeof(myaddr)); //zera a estrutura

> myaddr.sin_family=AF_INET; //define a familília

> myaddr.sin_port=htons(12345); //define a porta

> myaddr.sin_addr.s_addr=INADDR_ANY;//associa a estrutura

qualquer endereço de máquina

> if(bind(listenfd, (struct sockaddr *)&myaddr,

sizeof(myaddr))==0)

> printf("Escutando...\n");

> listen(listenfd,5);//deixa o socket na escuta de pedidos de

coneão

>

> for(;;)

> {

> memset(&cliaddr, 0, sizeof(cliaddr));

> size=sizeof(cliaddr);

> connfd=accept(listenfd, (struct sockaddr *) &cliaddr, &size);

//aceita pedidos de conexão

> t->tempo[++t->inic]=recv(listenfd,cmd,bufsize,0);

> printf("Novo tempo cadastrado: %s\n");

> send(connfd, "Tempo cadastrado!\n", 18, MSG_WAITALL);

> close(connfd);

>

> }

> return 0;

> }

>

>

>

------------------------------------------------------------------------

> CLiente.c

> #include <sys/types.h>

> #include <sys/socket.h>

> #include <unistd.h>

> #include <netinet/in.h>

> #include <arpa/inet.h>

> #include <string.h>

> #include<stdio.h>

>

>

>

>

> int main(int argc, char **argv)

> {

>

> int sockfd,erro,errosend, bytes;

> erro = 0;

> struct sockaddr_in end_servidor;

> char recvline[10];

> char x[10];

> char *ptr;

> char cmd[20];

> int bufsize=128;

> if(argc!=3)

> {

> printf("Parametros incorretos\n");

> return -1;

> }

>

> printf("Digite a hora que deseja ser despertado");

> gets(x);

> ptr=strtok(x, " ");

> strcpy(cmd,ptr);

> while(strcmp(cmd,"set"))

> {

> printf("Este comando não é válido\n");

> gets(x);

> ptr=strtok(x, " ");

> strcpy(cmd,ptr);

> }

>

> sockfd=socket(AF_INET, SOCK_STREAM, 0);

> memset(&end_servidor,0, sizeof(end_servidor));

> end_servidor.sin_family=AF_INET;

> end_servidor.sin_port=htons(atoi(argv[2]));

> inet_aton(argv[1], &end_servidor.sin_addr);

>

> erro = connect(sockfd,(struct sockaddr

*)&end_servidor,sizeof(end_servidor));

> if( erro != 0 )

> {

> printf("Erro ao tentar se conectar so servidor\n");

> return(-1);

> }

> send(sockfd,cmd, bufsize,0);

>

> bytes = recv(sockfd,recvline,20,MSG_WAITALL);

> printf("%d Bytes recebidos\n",bytes);

> fputs(recvline,stdout);

> close(sockfd);

> return 0;

> }

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Opa!

No loop do servidor, observe a seguinte linha:

t->tempo[ ++t->inic ] = recv( listenfd, cmd, bufsize, 0 );
O membro "tempo" da estrutura "t" é inteiro, e nessa linha você tenta igualá-lo a uma string. Se a string "cmd" for um número, use a função "atoi" para converter essa atring para um inteiro:
t->tempo[ ++t->inic ] =
               atoi( recv( listenfd, cmd, bufsize, 0 ) );

Observe também que "t->inic" não tem um valor inicial. Sendo assim, corre o risco de o valor armazenado nele ultrapasse os limites do array.

Até mais!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...