int main (int argc, char *argv[]){ //traitement parametres entree int listenPort = 25; int listenfd,connfd,pid; socklen_t len; struct sockaddr_in servaddr,cliaddr; struct sigaction; //On ignore (SIG_IGN) le signal que chaque fils qui se termine envoie à son père (SIGCHLD) //Ainsi, les fils ne passent pas par l'Etat zombie signal(SIGCHLD,SIG_IGN); listenfd=socket(AF_INET,SOCK_STREAM,0);//Creation du socket if(listenfd < 0){ perror("Error While Opening The Sotcket"); exit(1); } bzero(&servaddr,sizeof(servaddr));//mise a zero de la structure servaddr.sin_family=AF_INET;//IPv4 servaddr.sin_addr.s_addr=htonl(INADDR_ANY);//connexion acceptée pour toute adresse(adresse de l'hote convertit en adresse reseau) servaddr.sin_port=htons(listenPort);//port sur lequel ecoute le serveur if(bind(listenfd,(struct sockaddr *)& servaddr,sizeof(servaddr))<0){//on relie le descripteur à la structure de socket perror("ERROR Binding of Isaac (or the socket maybe ?"); exit(7); } listen(listenfd,10);//convertit la socket en socket passive,attendant les connexions. 10=nombre maximal de clients mis en attente de connexion par le noyau len=sizeof(cliaddr); for(;;) { connfd=accept(listenfd,(struct sockaddr*)&cliaddr,&len); if(connfd < 0){ perror("ERROR Accepting the Connection (no more connection available ? "); exit(4); } printf("connexion : port %d\n",listenPort); pid=fork(); if(pid<0){ perror("Cannot create child process to treat the new connexion"); exit(6); } if(pid==0) { /* Inside client process */ close(listenfd); SmtpStatus Status = reception(connfd);//fonction chargée de travailler avec le client //Envoi du message au prochian relai envoi(&Status); close(connfd); } close(connfd); } return(0); }
void afficheur::refreshAfficheur() { // Serial.print("numSeq "); //Serial.println(_numSeq); if (_numMax==0) return; _numSeq=_numSeq+1; if (_numSeq>_numMax) { _numSeq=-1; envoi(0xFF); } else { envoi(_affichageEnCours[_numSeq]); } }
void afficheur::affiche(byte toto) { switch (toto) { case AFFICHERIEN : // affiche rien _affichageEnCours[0]=0xFF; Serial.println("Rien"); _numMax =0; break; case AFFICHEUSB : // affiche USB _affichageEnCours[0]=0x89;// _affichageEnCours[1]=0xA4;// _affichageEnCours[2]=0x8C;// Serial.println("USB"); _numMax =2; break; case AFFICHESWEEP : // affiche SWEEP _affichageEnCours[0]=0xA4;// _affichageEnCours[1]=0x9D;// _affichageEnCours[2]=0x86; _affichageEnCours[3]=0x86; _affichageEnCours[4]=0xC2; Serial.println("SWEEP"); _numMax =4; break; case AFFICHEPOTAR : _affichageEnCours[0]=0xC2; _affichageEnCours[1]=0x81; _affichageEnCours[2]=0x8E; _affichageEnCours[3]=0xC0; _affichageEnCours[4]=0xDE; _numMax=4; Serial.println("POtAr"); break; case AFFICHEMILIEU : // affiche Milieu _affichageEnCours[0]=0xC1; _affichageEnCours[1]=0xF9;// _affichageEnCours[2]=0x8F;// _affichageEnCours[3]=0xF9; _affichageEnCours[4]=0x86;// _affichageEnCours[5]=0x89;// Serial.println("MILIEU"); _numMax =5; break; case AFFICHEADAFRUIT : // affiche A Adafruit _affichageEnCours[0]=0xC0; _affichageEnCours[1]=0x98; _affichageEnCours[2]=0xC0; _affichageEnCours[3]=0xC3; _affichageEnCours[4]=0xDE; _affichageEnCours[5]=0x89; _affichageEnCours[6]=0xF9; _affichageEnCours[7]=0x8E; Serial.println("ADAFrUIt"); _numMax =7; break; case AFFICHECLASSIQUE : // affiche classique _affichageEnCours[0]=0x87; _affichageEnCours[1]=0x8F; _affichageEnCours[2]=0xC0; _affichageEnCours[3]=0xA4; _affichageEnCours[4]=0xA4; _affichageEnCours[5]=0xF9; _affichageEnCours[6]=0xE0; _affichageEnCours[7]=0x89; _affichageEnCours[8]=0x86; Serial.println("CLASSIQUE"); _numMax =8; break; } _numSeq=0; // Serial.println(_affichageEnCours[0]); envoi(_affichageEnCours[0]); }
int main (int argc, char *argv[]) { struct sockaddr_in Connect,Data,Client; char segPerdu [7]; int descData,descConnect; int portData=8080; int portConnect; int numSeg=0; socklen_t adrsize=sizeof(Client); //Initialisation du port de connexion if(argc ==2){ portConnect = atoi(argv[1]); printf("Le port de Connection est :%d\n",portConnect); } else { printf("Pas le bon nombre d'arguments en entrée\n"); return 0; } initSocket(&descConnect,portConnect,Connect); initConnexion(descConnect,portData,(struct sockaddr*) &Client); //printf("Data %d %d\n", ntohl(Data.sin_addr.s_addr), ntohs(Data.sin_port)); initSocket(&descData, portData, Data); FILE* fichier=openFich(descData,(struct sockaddr*) &Client,adrsize); fd_set readset; struct timeval tv; tv.tv_sec = 3; while(1){ FD_ZERO(&readset); FD_CLR(0, &readset); //printf("test1\n"); FD_SET(descData, &readset); //printf("Erreur avant select\n"); if(select(descData+1, &readset, NULL, NULL,&tv)==-1){ perror("select"); } //printf("Erreur après select\n"); numSeg++; //printf("test3\n"); if (FD_ISSET(descData, &readset)) { printf("Erreur de récéption\n"); sleep(3); //memset(segPerdu,0,7); //recvfrom(descData,segPerdu,RCVSIZE,0, (struct sockaddr*) &Data,&adrsize); //printf("Ce segment s'est égaté : %d\n", atoi(segPerdu)); }else{ printf("Envoi\n"); envoi(descData,numSeg,fichier,(struct sockaddr*) &Client,adrsize); /* sth to snd */ } } }