/* Rotina1 - emissor Esta rotina recebe uma linha do teclado e envia-a para uma outra */ #include #include #include #include main(void) { struct sockaddr_in me, target; 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(0); bzero((char*)&target, sizeof(target)); target.sin_family=AF_INET; target.sin_addr.s_addr=inet_addr("193.136.62.26"); /* ideafix */ target.sin_port=htons(8450); bind(sock,(struct sockaddr*)&me, addrlen); do { gets(linha); sendto(sock, linha, 81, 0, (struct sockaddr*)&target, sizeof(target)); } while(strcmp(linha, "fim")); close(sock); } /* Rotina2 - intermédio Esta rotina recebe uma informação da Rotina1, converte-a para maiúsculas, e envia-a para a Rotina3 */ #include #include #include #include main(void) { struct sockaddr_in from, me, target; int sock, addrlen=sizeof(me), i; 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); bzero((char*)&target, sizeof(target)); target.sin_family=AF_INET; target.sin_addr.s_addr=inet_addr("193.136.62.24"); /* asterix */ target.sin_port=htons(8450); bind(sock,(struct sockaddr*)&me, addrlen); do { recvfrom(sock, linha, 81, 0, (struct sockaddr*)&from, &addrlen); i=0; while (linha[i] != '\0') {linha[i] = toupper(linha[i]); i++;} puts(linha); sendto(sock, linha, 81, 0, (struct sockaddr*)&target, sizeof(target)); } while(strcmp(linha, "FIM")); close(sock); } /* Rotina3 - receptor Esta rotina recebe uma informação da Rotina2 e converte-a para minúsculas */ #include #include #include #include main(void) { struct sockaddr_in me, from; int sock=socket(AF_INET,SOCK_DGRAM,0); int addrlen=sizeof(from), i; char linha[81]; bzero((char*)&me, sizeof(me)); me.sin_family=AF_INET; me.sin_addr.s_addr=htonl(INADDR_ANY); me.sin_port=htons(8450); bind(sock,(struct sockaddr*)&me, sizeof(me)); do { recvfrom(sock, linha, 81, 0, (struct sockaddr*)&from, &addrlen); i=0; while (linha[i] != '\0') {linha[i] = tolower(linha[i]); i++;} puts(linha); } while(strcmp(linha, "fim")); close(sock); }