#include #include #include #include #include #include #include #include #include #include /************************************** * Definitions des constantes *************************************/ #define LGMAXINFO 1024 #define FALSE 0 #define TRUE !0 /************************************** * Definitions des types *************************************/ struct adresse { int port; char domaine[500]; }; /************************************** * Definitions des variables *************************************/ int descServ=-1; int descClt=-1; char msg[LGMAXINFO]; char maMachine[LGMAXINFO]; /************************************** * Definitions des fonctions *************************************/ char * lire(int descSock); int traiter_message(char * msg); void ecrire(int descSock, char * msg); int connexion(struct adresse *address); void ecrireMessage(char* chan, char* message); void chgNick(char* nick); void mp(char* message); int main(int argc, char * argv[]){ struct adresse *adr; adr=malloc(sizeof(adr)); printf("Serveur %s sur le port %d\n", argv[1], atoi(argv[2])); adr->port=atoi(argv[2]); memcpy((void *)adr->domaine, (const void *)argv[1], strlen(argv[1])); descServ=connexion(adr); while(traiter_message(lire(descServ)) != FALSE){ } free(adr); close(descServ); return(1); } /************************************* * Implementation des fonctions ************************************/ char * lire(int descSock){ if(descSock == -1){ perror("Probleme de lecture : erreur avec le descripteur"); exit(0); } int err; memset(msg, 0, LGMAXINFO); err=read(descSock, msg, LGMAXINFO); if(err<=0){ perror("Probleme de lecture"); exit(1); } return msg; } int traiter_message(char * msg){ return TRUE; } void ecrire(int descSock, char * msg){ if(descSock == -1){ perror("Probleme d'ecriture : erreur avec le descripteur"); exit(0); } int err; err=write(descSock, msg, strlen(msg)); if(err<=0){ printf("Erreur d'envois du message : %s", msg); perror("Probleme d'ecriture"); exit(1); } } int connexion(struct adresse * address) { int sock, err; struct sockaddr_in sin; struct in_addr *adr; struct hostent *host; sin.sin_family = AF_INET; sin.sin_port=htons((int)address->port); //host=gethostbyname(address->domaine); printf("test\n"); printf("le serveur est : %s\n", address->domaine); host=gethostbyname(address->domaine); printf("test\n"); sin.sin_addr=*(struct in_addr*)host->h_addr; sock = socket (AF_INET, SOCK_DGRAM, 0); if(sock==-1){ printf("Erreur Socket\n"); exit(0); } err=connect(sock, (struct sockaddr *)&sin, sizeof(struct sockaddr)); //free(adr); printf("test2\n"); if(err == -1){ printf("Connection error\n"); } printf("%s\n", lire(sock)); printf("%s\n", lire(sock)); printf("%s\n", lire(sock)); printf("test2\n"); return sock; }