//int CreerConnexion(struct Physique *pL, char * NCli, int pcli, char *NSer, int pser) int CreateSockets(struct sockaddr_in *psoo, struct sockaddr_in *psos, char * NCli, int PortCli, char *NSer, int PortSer) { int res; int desc; char *message; struct hostent *phcli, *phser; int ip4cl, ip4se; /*adresse du client et serveur */ phcli = gethostbyname(NCli); if (phcli == NULL) { perror("Nom client\n"); return (-1); } memcpy(&(ip4cl), phcli->h_addr_list[0], sizeof(ip4cl)); fprintf(stderr, "IP du client:"); afficher_adresse((struct ip4*)&(ip4cl)); /*----- adresse IP du serveur ---*/ if (NSer != NULL) { phser = gethostbyname(NSer); if (phser == NULL) { perror("Nom Serveur\n"); return(-1); } memcpy(&(ip4se), phser->h_addr_list[0], sizeof(ip4se)); fprintf(stderr, "IP du serveur:"); afficher_adresse((struct ip4*)&(ip4se)); } /* Creation socket Client */ desc = creer_socket(SOCK_DGRAM, (u_long *)&(ip4cl), PortCli, psoo); if (desc==-1) return(desc); else fprintf(stderr, "Creation socket réussie \n"); /* Creation socket Serveur */ if (NSer != NULL) { psos-> sin_family = AF_INET; memcpy(&(psos->sin_addr.s_addr), &(ip4se), 4); psos-> sin_port = htons(PortSer); } return(desc); }
int main(int argc,char * argv[]){ struct sockaddr_in adresse; int port; int socket_ecoute, socket_service; port = atoi(argv[1]); socket_ecoute = creer_socket(SOCK_STREAM, &port, &adresse); listen(socket_ecoute, 10); while(1){ printf("Attente connection\n"); accept(socket_ecoute, (struct sockaddr*)&adresse, sizeof(struct sockaddr_in)); printf("Nouvelle connection\n"); if(fork() == 0){ close(socket_ecoute); fonction_service(socket_service); } close(socket_service); return EXIT_SUCCESS; }
int main(int argc, char* argv[]){ SOCKADDR_IN adresse;//client int port; SOCKET socket_ecoute, socket_service; port = atoi(argv[1]); socket_ecoute = creer_socket(SOCK_STREAM, port, &adresse); listen(socket_ecoute,5); while(1){ printf("\nAttente connection...\n"); /*Acceptation d'une connexion pendante*/ socket_service = accept(socket_ecoute,(SOCKADDR*)&adresse,sizeof(SOCKADDR_IN)); printf("\nNouvelle connection\n"); if(fork() == 0){ close(socket_ecoute); client_service(socket_service); } close(socket_service); } return 0; }
int main(int argc, char* argv[]) { if (argc != 5) { printf("error syntaxe : %s nbPort nbPort nbPort nbPort \n", argv[0]); exit(1); } int PORTSERV[N_SOCKET]; int socket_attentes[N_SOCKET]; fd_set mselect; int plg_desc = -1; int socket_cnx; /* Socket de communication */ struct sockaddr_in sc_from; /* Nom de la socket distante */ int sc_from_len = sizeof(sc_from); int i; for (i = 1; i <= N_SOCKET; i++) PORTSERV[i - 1] = atoi(argv[i]); FD_ZERO(&mselect); /* creation de la socket et ecoute sur la socket*/ for (i = 0; i < N_SOCKET; i++) { socket_attentes[i] = creer_socket(PORTSERV[i]); listen(socket_attentes[i], 5); FD_SET(socket_attentes[i], &mselect); if (plg_desc < socket_attentes[i]) { plg_desc = socket_attentes[i]; } printf("test plg_desc %d \n", plg_desc); } printf("%s >>>\n", argv[0]); FILE* file; if ((file = fopen("cx.log", "w")) == NULL) { perror("fopen"); } signal(SIGINT, handler); while (VRAI) { if (select(plg_desc + 1, &mselect, NULL, NULL, NULL) <= 0) { perror("select"); break; } printf("select interrompu \n"); for (i = 0; i < N_SOCKET; ++i) { if (FD_ISSET(socket_attentes[i], &mselect)) { /* Etablir la connexion */ if ((socket_cnx = accept(socket_attentes[i], (struct sockaddr *) &sc_from, &sc_from_len)) == -1) { perror("accept"); exit(2); } /******** Traitement *********/ fprintf(stdout, "IP = %s, \n", inet_ntoa(sc_from.sin_addr)); fprintf(file, "IP = %s \n", inet_ntoa(sc_from.sin_addr)); /* Fermer la connexion */ shutdown(socket_cnx, 2); close(socket_cnx); } } /** reinitialiser l'ensemble d'ecoute sur select**/ FD_ZERO(&mselect); for (i = 0; i < N_SOCKET; i++) { FD_SET(socket_attentes[i], &mselect); } } /* Fermer des sockets attentes */ for (i = 0; i < N_SOCKET; i++) { close(socket_attentes[i]); } fclose(file); return EXIT_SUCCESS; }
int main(int argc, char **argv) { /* processus intermediaire pour "nettoyer" */ /* la liste des arguments qu'on va passer */ /* a la commande a executer vraiment */ char nom_dsm[MAXBUF]; int cli_sock; int sock_dsm; int port_dsm ; struct sockaddr_in servaddr; socklen_t length; int i=0,j; int rc; /* creation d'une socket pour se connecter au */ /* au lanceur et envoyer/recevoir les infos */ /* necessaires pour la phase dsm_init */ struct hostent *addr_srv; struct in_addr addr; addr_srv = gethostbyname(argv[1]);// recuperer dans une structure hostent l'addresse ip du lanceur a partir de son nom addr.s_addr = *(u_long *) addr_srv->h_addr_list[0]; //recuperer dans une structure in_addr qui correspond au nom de la machine distante struct addrinfo hints; memset(&hints, 0, sizeof(struct addrinfo)); // initialisation structure addrinfo hints.ai_socktype = SOCK_STREAM; // type : socket TCP struct addrinfo* returned_infos; // renvoie une ou plusieurs structures addrinfo, chacune d'entre elles contenant une adresse Internet dans returned_infos rc = getaddrinfo(inet_ntoa(addr), argv[2], &hints, &returned_infos); if (rc != 0) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rc)); return -1; } struct addrinfo* rp; //on parcourt toutes les addrinfo jusqu'a trouver l'addresse a laquelle on peut se connecter (celle actuellement en ecoute) for (rp = returned_infos; rp != NULL; rp = rp->ai_next) { //creation de la socket avec laquelle on a recevoir des donnees au lanceur cli_sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); if (cli_sock == -1) { continue; } if (connect(cli_sock, rp->ai_addr, rp->ai_addrlen) == 0) { break; } close(cli_sock); cli_sock = -1; } freeaddrinfo(returned_infos); if(cli_sock < 0) { perror("Connexion echouee"); exit(EXIT_FAILURE); } /* Envoi du nom de machine au lanceur */ gethostname(nom_dsm, MAXBUF); printf("%s\n", nom_dsm); /* Envoi du pid au lanceur */ pid_t pid = getpid(); printf("%d\n", pid); /* Creation de la socket d'ecoute pour les */ /* connexions avec les autres processus dsm */ sock_dsm=creer_socket(); if(listen(sock_dsm, BACKLOG) < 0) { perror("listen"); exit(EXIT_FAILURE); } length=sizeof(struct sockaddr_in); if( getsockname(sock_dsm, (struct sockaddr*) &servaddr, &length) == -1) { perror("getsockname"); exit(EXIT_FAILURE); } /* Envoi du numero de port au lanceur */ /* pour qu'il le propage a tous les autres */ /* processus dsm */ port_dsm = ntohs(servaddr.sin_port); printf("%d\n", port_dsm); //envoi du rang au lanceur printf("%s\n", argv[3]); /// Flush /// fflush(stdout); fflush(stderr); //recuperer le nombre d'arguments du programme a executer while(argv[i+5]!=NULL){ i=i+1; } char* newargv[i+1] ; //tableau d'arguments du programme a executer for (j=0; j<i; j++) newargv[j] = argv[5+j]; newargv[i]=NULL; //recuperation du chemin de l'executable du programme a executer char *chemin = "~/prog_syst/bin/"; strcat(chemin, argv[4]); /* On execute la commande demandee */ execvp(chemin,newargv); return 0; }