Академический Документы
Профессиональный Документы
Культура Документы
Tenho que fazer a replicao de um servid or01 para um servidor02 depois do servidor01 ter recebido os dados do cliente01. O que se passa o seguinte: Eu crio o socket tanto no servidor01 como no cliente01 e existe a ligao. Quando ac aba a transferncia de dados, fecho o socket, tanto no servidor01 como no cliente0 1. Depois disso, crio outro socket no servidor01, sendo que este passa a ser "cl iente" e conecta-se ao servidor02. Agora o problema que isto no acontece. No da nenhum erro, e eu no entendo o que se passa. J fiz uns prints para tentar fazer debugging. No criada a ligao.
// Servidor 01 if ((t=accept(s,(struct sockaddr *) &isa, &i)) < 0) { perror("accept\n\n"); exit (1); } close(t); close(s); port=ntohs(2350); //S par a saber qual o porto que enviado. /* resolver o nome do ho st para endereco ip e verificar a sua existencia*/ if ((hp=gethostbyname(ho st))==NULL) { fprintf(stderr, "%s:%s: Servidor invalida\n",myname, host); exit(1); } /* colocar o numero do p orto de destino na estrutura apropriada destino na estrutura apropriada , (char *)&sa.sin_addr, hp->h_length); sa.sin_family=hp->h_addr type; /* criar um socket */ if ((s=socket(hp->h_addr type,SOCK_STREAM,0))<0) { printf("ERROR: s ocket()"); exit(1); } if (connect(s,(struct so ckaddr *) &sa,sizeof(sa))<0) { printf("ERROR: c onnect()"); */ sa.sin_port=port; /* colocar o endereco de */ bcopy((char *)hp->h_addr
exit(1); } sprintf(replicar, "REPLI CAR"); write(s, replicar, strle n(replicar)); sync(); close(s);
// Servidor 02 myname = argv[0]; /* porto de destino */ port=ntohs(atoi(argv[1])); printf(" Numero do porto: %s\n", argv[1]); /* obter informacoes sobre o nosso host */ gethostname(localhost, MAXHOSTNAME); printf(" local hostname:%s\n",localhost); if((hp = gethostbyname(localhost)) == NULL) { fprintf(stderr, "%s: Nao consigo obter informacoes sobre o s istema local\n", myname); exit (1); } /* colocar o numero do porto do servico na estrutura apropriada */ sa.sin_port = port; bcopy((char *)hp->h_addr, (char *)&sa.sin_addr, hp->h_length); sa.sin_family = hp->h_addrtype; /* criar um socket */ if((s = socket(hp->h_addrtype, SOCK_STREAM, 0)) < 0) { perror("socket"); exit(1); } /* Associa o socket ao porto */ if (bind(s,(struct sockaddr *) &sa, sizeof(sa)) < 0) { perror("bind"); exit(1); } /* configurar o numero maximo de ligacoes ao servico */ listen(s, BACKLOG); printf("\n Aceitando ligacoes...\n"); /* loop infinito para esperar ligacoes while (1) { // Serve para o Select */
tv.tv_sec = 0; tv.tv_usec = 500000; FD_ZERO(&readfds); FD_SET(s, &readfds); FD_SET(0, &readfds); i = sizeof(isa); select(s+1, &readfds, NULL, NULL, &tv); if (FD_ISSET(s, &readfds)) { //Se chegar uma ligao, faz o que for pedido. }