int connexionServeur(char *hote,int port) { int df; struct sockaddr_in adresse; socklen_t taille=sizeof adresse; int statut; /* Creation d'une socket */ df=socket(PF_INET,SOCK_STREAM,0); if(df<0){ perror("connexionServeur.socket"); exit(-1); } /* Connection de la socket a l'hote */ adresse.sin_family=AF_INET; if(nomVersAdresse(hote,(void *)&adresse)<0) return -1; adresse.sin_port=htons(port); if(connect(df,(struct sockaddr *)&adresse,taille)<0) return(-1); else return df; }
int connexionServeur(char *hote,int port) { int df; struct sockaddr_in6 adresse; socklen_t taille=sizeof adresse; int statut; /* Creation d'une socket */ df=socket(PF_INET6,SOCK_STREAM,0); if(df<0){ perror("connexionServeur.socket"); exit(-1); } /* Connection de la socket a l'hote */ adresse.sin6_family=AF_INET6; if(nomVersAdresse(hote,(void *)&adresse)<0) return -1; adresse.sin6_port=htons(port); adresse.sin6_flowinfo=0; adresse.sin6_scope_id=0; if(connect(df,(struct sockaddr *)&adresse,taille)<0) return(-1); else return df; }
int main(int argc,char *argv[]) { int s; /* Lecture des arguments de la commande */ analyseArguments(argc,argv); /* Connection au serveur */ s=connexionServeur(machine,port); if(s<0){ fprintf(stderr,"Erreur de connexion au serveur\n"); exit(-1); } /* Boucle de communication avec le serveur */ while(1){ char tampon[MAX_TAMPON]; fd_set ens_lecture; int taille; int statut; FD_ZERO(&ens_lecture); FD_SET(0,&ens_lecture); FD_SET(s,&ens_lecture); statut=select(s+1,&ens_lecture,NULL,NULL,NULL); if(statut<0){perror("select"); exit(-1);} if(FD_ISSET(0,&ens_lecture)){ if((taille=read(0,tampon,MAX_TAMPON))<=0) break; if(write(s,tampon,taille)!=taille) break; } if(FD_ISSET(s,&ens_lecture)){ if((taille=read(s,tampon,MAX_TAMPON))<=0) break; if(write(1,tampon,taille)!=taille) break; } } }