Ir para conteúdo
Fórum Script Brasil

dtsv

Membros
  • Total de itens

    2
  • Registro em

  • Última visita

Sobre dtsv

dtsv's Achievements

0

Reputação

  1. Boa tarde a todos Estou com uma pequena duvida que espero que vocês possam me ajudar, vamos lá Estou fazendo um codigo de troca de mensagens de um cliente para um servidor, o servidor se conecta aguarda, o cliente se conecta e envia uma mensagem para o servidor e entra em espera, ai o servidor envia uma mensagem para o cliente e entra em estado de espera. Como se fosse um walk talk, enquanto um fala o outro espera. E termina quando um deles digita cambio desligo. Agora eu pergunto qual a alteração que eu teria que fazer para que tanto o cliente como o servidor pudessem ficar falando e só parassem de falar quanto eu digitasse cambio. Ex: O cliente esta falando: cliente falando... cliente falando... cliente falando... cambio ai o servidor recebe as mensagens e começa a falar e também só para quando for digitado cambio, e ai o cliente volta a falar. E ambos seriam fechados com cambio desligo. Segue os codigos abaixo: /* servidor */ #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <arpa/inet.h> #include <signal.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <limits.h> #define LINHA 200 int le_esvaziando_buf_teclado (char *f, int t) { char * anda = f; for (*anda=getc(stdin); ( anda < (f+t-1)) && ( (*anda) != '\n') ; (*anda)=getc(stdin) ) { anda++; } (*anda) = '\0'; __fpurge(stdin); return(anda - f); } int main (int argc, char * argv[]) { int sock, length; struct sockaddr_in server, client; int connected, validacao; char t[LINHA]="algo", c[7]="cambio", resp; FILE *fp, *x; if (argc != 3) { printf("Utilização: socket porta lista_de_espera\n"); exit(EXIT_FAILURE); } if ((sock = socket(AF_INET,SOCK_STREAM,0))==-1) { printf("Erro ao criar o socket\n"); exit(1); } server.sin_family = AF_INET; server.sin_addr.s_addr = htonl (INADDR_ANY); server.sin_port = htons(atoi(argv[1])); if (bind(sock,(struct sockaddr *)&server,sizeof(server)) == -1) { printf("Erro no bind!\n"); exit(1); } printf("Socket port #%d\n",ntohs(server.sin_port)); listen(sock,atoi(argv[2])); length = sizeof (client); printf("Esperando conexao...\n"); connected = accept(sock, (struct sockaddr *)&client,&length); printf("Conectou 1 cliente....\n"); while ( strcmp(t,"cambio desligo") != 0) { validacao = read (connected, (char *) t, LINHA); printf("MSG Recebida:%s\n",t); validacao = read (connected, (char *) c, 15); if( strcmp(c,"cambio") != 0) { printf("Falha no protocolo!!!!!\n"); printf("\t\t\nAcesso Negado!!!!!\n"); exit(-1); } else printf("MSG Recebida:%s\\n",c); if ( strcmp(t,"cambio desligo") != 0) { printf("Digite algo a transmitir:"); le_esvaziando_buf_teclado(t,LINHA); validacao = write (connected, (void *) t, LINHA); printf("MSG Transmitida:%s\n",t); validacao = write (connected, (void *) c, 15); printf("MSG Transmitida:%s\\n",c); } } close(sock); close(connected); } /* cliente */ #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <arpa/inet.h> #include <signal.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <limits.h> #define LINHA 200 int le_esvaziando_buf_teclado (char *f, int t) { char * anda = f; for (*anda=getc(stdin); ( anda < (f+t-1)) && ( (*anda) != '\n') ; (*anda)=getc(stdin) ) { anda++; } (*anda) = '\0'; __fpurge(stdin); return(anda - f); } int main (int argc, char * argv[]) { int sock; struct sockaddr_in server; struct hostent *hp, *gethostbyname(); int validacao; char t[LINHA]="Será que vai funcionar", c[7]="cambio", resp, enc = 'f'; FILE *fp, x; if (argc != 3) { printf("Utilização: cli host porta\n"); exit(EXIT_FAILURE); } if ((sock = socket(AF_INET,SOCK_STREAM,0))==-1) { printf("Erro ao criar o socket\n"); exit(1); } hp = gethostbyname (argv[1]); memcpy ((char*)&server.sin_addr, (char*)hp->h_addr, hp->h_length); server.sin_family = AF_INET; server.sin_port = htons(atoi(argv[2])); if ( connect(sock, (struct sockaddr *)&server, sizeof (server) ) == -1) { printf("\nErro de conexão com o servidor através de Socket\n"); exit(1); } while ( strcmp(t,"cambio desligo") != 0) { printf("Digite algo a transmitir:"); le_esvaziando_buf_teclado(t,LINHA); validacao = write (sock, (void *) t, LINHA); printf("MSG Transmitida:%s\n",t); validacao = write (sock, (void *) c, 15); printf("MSG Transmitida:%s\\n",c); if( strcmp(t,"cambio desligo") != 0) { validacao = read (sock, (char *) t, LINHA); printf("MSG Recebida:%s\n",t); validacao = read (sock, (char *) c, 15); printf("MSG Recebida:%s\\n",c); if( strcmp(c,"cambio") != 0) { printf("Falha no protocolo!!!!!\n"); printf("\t\t\nAcesso Negado!!!!!\n"); exit(-1); } } } close(sock); }
  2. Alguém saberia como ficaria o codigo deste programa ??? Nome do Programa: micro.cron.c Finalidade: Agendador de Tarefas Sintaxe: ./micro.cron <nome do arquivo> Onde: ------ <nome do arquivo> é um arquivo texto -> microcron.tab Criar o arquivo texto microcon.tab e inserir através do vi, algumas linhas como: 10 ls 11 pwd Onde "10" significa o tempo de espera ( sleep(10) ) e "ls" o comando a ser executado. Esclarecimentos: ------------------ 1) O usuário poderá utilizar arquivos textos com outros nomes. 2) Utilizar como base os programas (costura.c e copia.c) e a função ( execvp("/bin/ls", *vetor ).
×
×
  • Criar Novo...