Fin du projet. Serveur Fonctionnel
This commit is contained in:
parent
9b2e4aa4b3
commit
4df267d543
12 changed files with 1493 additions and 1279 deletions
675
bal.h
675
bal.h
|
@ -1,71 +1,660 @@
|
||||||
//
|
//--------------------------PROG C ET RESEAUX-----------------------
|
||||||
// Created by Béranger Quintana | 3AE E
|
// Nom : Quintana
|
||||||
//
|
// Prénom : Béranger
|
||||||
|
// Grp : 3AE E
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
|
||||||
#ifndef PROGC_BAL_H
|
#ifndef __tsock__
|
||||||
#define PROGC_BAL_H
|
//Variable qui donne la longueur max d'un message
|
||||||
//---------------------------------------------------
|
int maxsize=9999;
|
||||||
//---------------Structure Liste---------------------
|
//Définitions des types
|
||||||
//---------------------------------------------------
|
|
||||||
|
|
||||||
typedef struct BAL
|
typedef struct BAL
|
||||||
{
|
{
|
||||||
int num_bal ;
|
int num ;
|
||||||
struct LETTRE* lfirst ;
|
int nb;
|
||||||
struct LETTRE* lcurrent ;
|
struct LETTRE * l_first ;
|
||||||
struct LETTRE* llast ;
|
struct LETTRE * l_last ;
|
||||||
|
struct LETTRE * l_current ;
|
||||||
struct BAL * suiv ;
|
struct BAL * suiv ;
|
||||||
}BAL ;
|
}BAL ;
|
||||||
|
|
||||||
typedef struct LETTRE
|
typedef struct LETTRE
|
||||||
{
|
{
|
||||||
int num ;
|
int num ;
|
||||||
|
int lg;
|
||||||
char *message ;
|
char *message ;
|
||||||
struct LETTRE * suiv ;
|
struct LETTRE * suiv ;
|
||||||
};
|
}LETTRE ;
|
||||||
|
|
||||||
typedef struct LISTE {
|
typedef struct LISTE_BAL
|
||||||
struct BAL * bal_premier ;
|
{
|
||||||
struct BAL * bal_dernier ;
|
struct BAL * first ;
|
||||||
struct BAL * bal_courant ;
|
struct BAL * last ;
|
||||||
|
struct BAL * current ;
|
||||||
|
int nb;
|
||||||
}LISTE_BAL;
|
}LISTE_BAL;
|
||||||
|
|
||||||
|
//---------------------------------------------------
|
||||||
|
//---------Déclaration des fonctions-----------------
|
||||||
//---------------------------------------------------
|
//---------------------------------------------------
|
||||||
// GESTION BAL
|
|
||||||
|
|
||||||
LISTE_BAL* initialiser_bal(){
|
LISTE_BAL* init_BAL();
|
||||||
|
void add_BAL(int num , LISTE_BAL* liste);
|
||||||
|
BAL* find_BAL(LISTE_BAL*liste, int num);
|
||||||
|
int find_BALR(LISTE_BAL*liste, int num);
|
||||||
|
void add_LETTRE (int n, int lg, BAL* bal , char* mess);
|
||||||
|
void printBAL(BAL* bal,int lg);
|
||||||
|
void empty(BAL*bal);
|
||||||
|
void EBAL(int port, char* dest, int nb_message, int lg_msg, int nBAL);
|
||||||
|
void SBAL(int port, char* dest);
|
||||||
|
void RBAL(int port, char* dest, int nBAL);
|
||||||
|
|
||||||
LISTE_BAL liste ;
|
//---------------------------------------------------
|
||||||
liste = (LISTE_BAL)malloc(sizeof(struct LISTE));
|
//--------------------GESTION BAL--------------------
|
||||||
liste->bal_premier = NULL;
|
//---------------------------------------------------
|
||||||
liste->bal_dernier = NULL;
|
|
||||||
liste->bal_courant = NULL;
|
LISTE_BAL* init_BAL()
|
||||||
|
{
|
||||||
|
LISTE_BAL* liste =(LISTE_BAL*)malloc(sizeof(struct LISTE_BAL));
|
||||||
|
liste->first = NULL;
|
||||||
|
liste->last=NULL;
|
||||||
|
liste->current = NULL;
|
||||||
|
liste->nb=0;
|
||||||
return liste ;
|
return liste ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ajouter_bal(int num, LISTE_BAL * liste){
|
//------------------------------------------------
|
||||||
|
//----Afficher le contenu d'une Liste de BAL------
|
||||||
BAL ma_bal = (BAL)malloc(sizeof(struct BAL));
|
//6-----------------------------------------------
|
||||||
ma_bal->num_bal = num ;
|
void printLISTE(struct LISTE_BAL* liste)
|
||||||
ma_bal->l_premier=NULL;
|
|
||||||
ma_bal->l_dernier=NULL;
|
|
||||||
ma_bal->l_courant=NULL;
|
|
||||||
ma_bal->bal_suiv = NULL;
|
|
||||||
|
|
||||||
|
|
||||||
if (liste == NULL)
|
|
||||||
{
|
{
|
||||||
liste->bal_premier = ma_bal ;
|
printf(" __________________________________________\n");
|
||||||
liste->bal_dernier = ma_bal ;
|
printf(" Check général des BAL de notre liste :\n\n");
|
||||||
|
printf(" %d BAL dans notre liste \n\n",liste->nb);
|
||||||
|
liste->current=liste->first;
|
||||||
|
while (liste->current!=NULL)
|
||||||
|
{
|
||||||
|
printf(" BAL n°%d : %d Lettres \n",liste->current->num,liste->current->nb);
|
||||||
|
liste->current=liste->current->suiv;
|
||||||
}
|
}
|
||||||
else {
|
printf(" __________________________________________\n\n");
|
||||||
liste->bal_dernier->bal_suiv = ma_bal ;
|
|
||||||
liste->bal_dernier = ma_bal ;
|
|
||||||
}
|
}
|
||||||
liste->bal_courant = ma_bal ;
|
|
||||||
|
//------------------------------------------------
|
||||||
|
//--------Afficher le contenu d'une BAL-----------
|
||||||
|
//------------------------------------------------
|
||||||
|
void printBAL(BAL* bal,int lg)
|
||||||
|
{
|
||||||
|
printf("Contenu de la BAL n°%d qui contient %d lettres \n",bal->num,bal->nb) ;
|
||||||
|
bal->l_current=bal->l_first;
|
||||||
|
printf("\n");
|
||||||
|
int n=1;
|
||||||
|
while(bal->l_current!=NULL)
|
||||||
|
{
|
||||||
|
printf("BAL n°%d | %d Lettres, lettre n°%d : [",bal->num,bal->nb,n);
|
||||||
|
afficher_message(bal->l_current->message,lg);
|
||||||
|
bal->l_current=bal->l_current->suiv;
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
printf("\n\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
//------------------------------------------------
|
||||||
|
//----------------Ajouter une BAL-----------------
|
||||||
|
//------------------------------------------------
|
||||||
|
|
||||||
|
void add_BAL(int n, LISTE_BAL * liste)
|
||||||
|
{
|
||||||
|
BAL *nouv =malloc(sizeof(struct BAL));
|
||||||
|
nouv->num=n;
|
||||||
|
nouv->nb=0;
|
||||||
|
nouv->l_first=NULL;
|
||||||
|
nouv->l_last=NULL;
|
||||||
|
nouv->l_current=NULL;
|
||||||
|
nouv->suiv=NULL;
|
||||||
|
|
||||||
|
if (liste->first == NULL)
|
||||||
|
{
|
||||||
|
liste->first = nouv ;
|
||||||
|
liste->last = nouv ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
liste->last->suiv= nouv ;
|
||||||
|
liste->last=nouv ;
|
||||||
|
}
|
||||||
|
liste->nb++;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------
|
||||||
|
//----Retourne une BAL en fonction de son num-----
|
||||||
|
//6-----------------------------------------------
|
||||||
|
|
||||||
|
BAL* find_BAL(LISTE_BAL*liste, int num)
|
||||||
|
{
|
||||||
|
BAL* bal=malloc(sizeof(struct BAL));
|
||||||
|
liste->current=liste->first;
|
||||||
|
if (liste->first==NULL)
|
||||||
|
{
|
||||||
|
add_BAL(num,liste);
|
||||||
|
bal=liste->first;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
liste->current=liste->first;
|
||||||
|
|
||||||
|
if (liste->first==liste->last)
|
||||||
|
{
|
||||||
|
if (liste->first->num==num)
|
||||||
|
bal=liste->current;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
add_BAL(num,liste);
|
||||||
|
bal=liste->last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (liste->first->num==num)
|
||||||
|
bal=liste->first;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int var=0;
|
||||||
|
while(var==0)
|
||||||
|
{
|
||||||
|
if (liste->current->suiv==NULL)
|
||||||
|
var=-1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
liste->current=liste->current->suiv;
|
||||||
|
if (liste->current->num==num)
|
||||||
|
var=1;
|
||||||
|
if (liste->current==NULL)
|
||||||
|
var=-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if (var==1)
|
||||||
|
bal=liste->current;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
add_BAL(num,liste);
|
||||||
|
bal=liste->last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bal;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------
|
||||||
|
//----------------------------------------findBALR--------------------------------------------
|
||||||
|
//-------Retourne -1 si BAL inexistante ou BAL Vide, lg 1ère lettre si BAL existante----------
|
||||||
|
//--------------------------------------------------------------------------------------------
|
||||||
|
int find_BALR(LISTE_BAL*liste, int num)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
if (liste->first==NULL)
|
||||||
|
{
|
||||||
|
ret=-1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
liste->current=liste->first;
|
||||||
|
if (liste->current==liste->last)
|
||||||
|
{
|
||||||
|
if (liste->current->num==num)
|
||||||
|
{
|
||||||
|
if (liste->current->l_first==NULL)
|
||||||
|
ret=-1;
|
||||||
|
else
|
||||||
|
ret=liste->current->l_first->lg;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ret=-1;
|
||||||
|
}
|
||||||
|
else if (liste->first->num==num)
|
||||||
|
{
|
||||||
|
if (liste->current->l_first==NULL)
|
||||||
|
ret=-1;
|
||||||
|
|
||||||
|
else
|
||||||
|
ret=liste->current->l_first->lg;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int var=0;
|
||||||
|
while(var==0)
|
||||||
|
{
|
||||||
|
if (liste->current->suiv==NULL)
|
||||||
|
var=-1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
liste->current=liste->current->suiv;
|
||||||
|
if (liste->current->num==num)
|
||||||
|
var=1;
|
||||||
|
if (liste->current==NULL)
|
||||||
|
var=-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if (var==1)
|
||||||
|
{
|
||||||
|
if (liste->current->l_first==NULL)
|
||||||
|
ret=-1;
|
||||||
|
else
|
||||||
|
ret=liste->current->l_first->lg;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ret=-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------
|
||||||
|
//----------------Ajouter une lettre en fin de BAL-----------------
|
||||||
|
//-----------------------------------------------------------------
|
||||||
|
|
||||||
|
void add_LETTRE (int n, int lg, BAL* bal , char* mess)
|
||||||
|
{
|
||||||
|
bal->nb=(bal->nb)+1;
|
||||||
|
LETTRE* nouv;
|
||||||
|
nouv=(LETTRE*)malloc(sizeof(LETTRE));
|
||||||
|
nouv->num=n+1;
|
||||||
|
nouv->lg=lg;
|
||||||
|
nouv->suiv=NULL;
|
||||||
|
|
||||||
|
if (bal->l_first==NULL)
|
||||||
|
{
|
||||||
|
bal->l_first=nouv;
|
||||||
|
bal->l_last=nouv;
|
||||||
|
bal->l_current=nouv;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bal->l_last->suiv=nouv;
|
||||||
|
bal->l_last=bal->l_last->suiv;
|
||||||
|
}
|
||||||
|
|
||||||
|
nouv->message=malloc(lg* sizeof(char));
|
||||||
|
for (int i=0 ; i<lg ; i++)
|
||||||
|
nouv->message[i] = mess[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------
|
||||||
|
//----------------Détruit une liste de BAL en fin d'utilisation de BAL-----------------
|
||||||
|
//6------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void empty(BAL*bal)
|
||||||
|
{
|
||||||
|
bal->l_current=bal->l_first;
|
||||||
|
while(bal->l_current!=NULL)
|
||||||
|
{
|
||||||
|
bal->l_current=bal->l_current->suiv;
|
||||||
|
free(bal->l_first);
|
||||||
|
bal->l_first=bal->l_current;
|
||||||
|
(bal->nb)--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void EBAL(int port, char* dest, int nb_message, int lg_msg, int nBAL)
|
||||||
|
{
|
||||||
|
//Déclarations
|
||||||
|
int sock;
|
||||||
|
struct sockaddr_in addr_distant ;
|
||||||
|
int lg_addr_distant=sizeof(addr_distant);
|
||||||
|
struct hostent *hp;
|
||||||
|
char motif;
|
||||||
|
char * message=malloc(lg_msg*sizeof(char));
|
||||||
|
int envoi=-1;
|
||||||
|
int lg_pdu=50;
|
||||||
|
int lg_recv;
|
||||||
|
char*pdu=malloc(lg_pdu*sizeof(char));
|
||||||
|
|
||||||
|
//---------------------------------------
|
||||||
|
//--------Etablissement connexion--------
|
||||||
|
//---------------------------------------
|
||||||
|
printf(" SOURCE : Emission de lettres pour la BAL n°%d\n",nBAL);
|
||||||
|
printf("____________________________________________________________________\n\n");
|
||||||
|
|
||||||
|
sprintf(pdu,"0 %d %d %d",nBAL, nb_message,lg_msg);
|
||||||
|
|
||||||
|
//Création socket
|
||||||
|
if((sock=socket(AF_INET,SOCK_STREAM,0))==-1)
|
||||||
|
{
|
||||||
|
printf("Erreur à l'ouverture du Socket Stream");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
//Construction adresse socket distant
|
||||||
|
memset((char*)&addr_distant,0,sizeof(addr_distant));
|
||||||
|
addr_distant.sin_family=AF_INET; //Internet
|
||||||
|
addr_distant.sin_port=port; //Numéro de Port
|
||||||
|
|
||||||
|
//Affectation IP
|
||||||
|
if((hp=gethostbyname(dest))==NULL)
|
||||||
|
{
|
||||||
|
printf("Erreur de requête IP.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy((char*)&(addr_distant.sin_addr.s_addr), hp->h_addr , hp->h_length);
|
||||||
|
|
||||||
|
//Demande de connexion
|
||||||
|
|
||||||
|
if (connect(sock,(struct sockaddr *)&addr_distant,sizeof(addr_distant))==-1)
|
||||||
|
{
|
||||||
|
printf("Erreur lors de la connexion, en attente de la tentative suivante \n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
//-----------------------------------------
|
||||||
|
//----------------Envoi PDU----------------
|
||||||
|
//-----------------------------------------
|
||||||
|
|
||||||
|
if ((envoi=write(sock,pdu,lg_pdu))==-1)
|
||||||
|
{
|
||||||
|
printf("Echec de l'envoi du PDU Emetteur (fonction write en défaut)\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
//-----------------------------------------
|
||||||
|
//----------TRANSFERT DE DONNEES-----------
|
||||||
|
//-----------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for (int i=1; i<=nb_message;i++)
|
||||||
|
{
|
||||||
|
printf("SOURCE : lettre n°%d (%d) [", i,lg_msg);
|
||||||
|
|
||||||
|
//Création du message
|
||||||
|
construire_message2(message,motif,lg_msg,i);
|
||||||
|
printbuffer2(nBAL,message);
|
||||||
|
afficher_message(message,lg_msg);
|
||||||
|
|
||||||
|
//Envoi du message
|
||||||
|
|
||||||
|
if ((envoi=write(sock,message,(lg_msg)/*,0,(struct sockaddr*)&addr_distant,lg_addr_distant)*/))==-1)
|
||||||
|
{
|
||||||
|
printf("Echec de l'envoi du message (fonction write en défaut)\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LISTE_BAL*
|
|
||||||
|
|
||||||
|
//Fermeture connexion
|
||||||
|
|
||||||
#endif //PROGC_BAL_H
|
if(shutdown(sock,2)==-1)
|
||||||
|
{
|
||||||
|
printf("Erreur à la fermeture de la connexion TCP \n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Fermeture Socket
|
||||||
|
if (close(sock)==-1)
|
||||||
|
{
|
||||||
|
printf("Echec de la fermeture du socket distant");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(message);
|
||||||
|
free(pdu);
|
||||||
|
printf("Envoi effectué avec succès\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void SBAL(int port, char*dest)
|
||||||
|
{
|
||||||
|
//Déclarations
|
||||||
|
int sock , sock2; //sock bis local orienté échanges
|
||||||
|
struct sockaddr* addr_distant;
|
||||||
|
struct sockaddr_in addr_local;
|
||||||
|
int lg_addr_distant=sizeof(addr_distant);
|
||||||
|
int lg_addr_local=sizeof(addr_local);
|
||||||
|
struct hostent *hp;
|
||||||
|
char motif;
|
||||||
|
char *message;
|
||||||
|
int lg_recv=-1;
|
||||||
|
int lg_sent=-1;
|
||||||
|
int lg_pdu=50;
|
||||||
|
int type=-1;
|
||||||
|
int nb;
|
||||||
|
int lg;
|
||||||
|
int n=1;
|
||||||
|
int nBAL;
|
||||||
|
BAL*bal=malloc(sizeof(struct BAL));
|
||||||
|
char *pdu;//=malloc(sizeof(char));
|
||||||
|
LISTE_BAL* liste;
|
||||||
|
//----------------------------------
|
||||||
|
//------------Connexion ------------
|
||||||
|
//----------------------------------
|
||||||
|
|
||||||
|
//Création socket local
|
||||||
|
if ((sock=socket(AF_INET,SOCK_STREAM,0))==-1)
|
||||||
|
{
|
||||||
|
printf("Echec de la création d'un socket local\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
//Construction adresse socket local | Affectation port et domaine
|
||||||
|
memset((char*)&addr_local, 0 , sizeof(addr_local));
|
||||||
|
addr_local.sin_family=AF_INET;
|
||||||
|
addr_local.sin_addr.s_addr=INADDR_ANY;
|
||||||
|
addr_local.sin_port=port;
|
||||||
|
|
||||||
|
//Bind
|
||||||
|
if (bind(sock,(struct sockaddr *)&addr_local, lg_addr_local)==-1)
|
||||||
|
{
|
||||||
|
printf("Echec du bind.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
//Check connexions entrantes
|
||||||
|
if (listen(sock,100)<0)
|
||||||
|
{
|
||||||
|
printf("Trop de connexions en attentes, échec de la demande\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
liste=init_BAL();
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
if ((sock2=accept(sock,(struct sockaddr*)&addr_distant,&lg_addr_distant))==-1)
|
||||||
|
{
|
||||||
|
printf("Refus de connexion par le serveur\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
pdu=malloc(50*sizeof(char));
|
||||||
|
if((lg_pdu=read(sock2,pdu, lg_pdu))<0)
|
||||||
|
{
|
||||||
|
printf("Echec de lecture du PDU entrant\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
sscanf(pdu, "%d %d %d %d", &type, &nBAL, &nb, &lg);
|
||||||
|
//GESTION EMETTEUR
|
||||||
|
if (atoi(pdu)==0)
|
||||||
|
{
|
||||||
|
printf(" ||||||| Réception des lettres pour la BAL n°%d |||||\n\n",nBAL);
|
||||||
|
message=malloc(lg*sizeof(char));
|
||||||
|
int n=0;
|
||||||
|
sscanf(pdu, "%d %d %d %d", &type, &nBAL, &nb, &lg);
|
||||||
|
bal=find_BAL(liste,nBAL);
|
||||||
|
|
||||||
|
while (n!=nb)
|
||||||
|
{
|
||||||
|
message = malloc(lg* sizeof(char));
|
||||||
|
if ((lg_recv = read(sock2, message, lg)) == -1)
|
||||||
|
{
|
||||||
|
printf("Erreur de lecture\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
if (lg_recv>0)
|
||||||
|
{
|
||||||
|
add_LETTRE(n,lg, bal,message);
|
||||||
|
}
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
|
||||||
|
printBAL(bal,lg);
|
||||||
|
}
|
||||||
|
//GESTION RECEPTEUR
|
||||||
|
else if (atoi(pdu)==1)
|
||||||
|
{
|
||||||
|
sscanf(pdu, "%d %d", &type, &nBAL);
|
||||||
|
printf(" ||||||| Restitution des lettres de la BAL n°%d |||||||\n\n",nBAL);
|
||||||
|
lg=find_BALR(liste,nBAL);
|
||||||
|
if (lg==-1) // Gestion du cas ou la BAL est vide, on envoie un PDU qui sera analysé par le récepteur.
|
||||||
|
{
|
||||||
|
printf(" BAL inexistante, PDU=0 pour informer le récepteur\n\n");
|
||||||
|
sprintf(pdu,"%d %d",lg,nb);
|
||||||
|
//printf ("PDU à envoyer : %d\n",lg);
|
||||||
|
int lg_sent=-1;
|
||||||
|
nb=1;
|
||||||
|
if ((lg_sent=write(sock2,pdu,lg_pdu))==-1) /*,0,(struct sockaddr*)&addr_distant,lg_addr_distant)*/
|
||||||
|
{
|
||||||
|
printf("Echec de l'envoi du PDU (fonction write en défaut)\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bal=find_BAL(liste,nBAL);
|
||||||
|
bal->l_current=bal->l_first;
|
||||||
|
|
||||||
|
while(bal->l_current!=NULL)
|
||||||
|
{
|
||||||
|
lg=bal->l_current->lg;
|
||||||
|
nb=bal->nb;
|
||||||
|
sprintf(pdu,"%d %d",lg,nb);
|
||||||
|
|
||||||
|
if ((lg_sent=write(sock2,pdu,lg_pdu))==-1) /*,0,(struct sockaddr*)&addr_distant,lg_addr_distant)*/
|
||||||
|
{
|
||||||
|
printf("Echec de l'envoi du PDU Emetteur (fonction write en défaut)\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
message=malloc(lg*sizeof(char));
|
||||||
|
message=bal->l_current->message;
|
||||||
|
|
||||||
|
if ((lg_sent=write(sock2,message,lg))==-1)
|
||||||
|
{
|
||||||
|
printf("Erreur lors de l'envoi du message n°%d\n",n);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
printf("BAL n°%d : Restitution de la lettre n°%d (%d) [",nBAL,n,lg);
|
||||||
|
afficher_message(message,lg);
|
||||||
|
bal->l_current=bal->l_current->suiv;
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
empty(bal);
|
||||||
|
if ((shutdown(sock2 , 2))==-1)
|
||||||
|
{
|
||||||
|
printf("Erreur à la fermeture de la connexion : shutdown\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("PDU non reconnu, on quitte par sécurité\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
printLISTE(liste);
|
||||||
|
free(pdu);
|
||||||
|
free(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void RBAL(int port, char* dest, int nBAL)
|
||||||
|
{
|
||||||
|
//Déclarations
|
||||||
|
int sock;
|
||||||
|
struct sockaddr_in addr_distant;
|
||||||
|
int lg_addr_distant = sizeof(addr_distant);
|
||||||
|
struct hostent *hp;
|
||||||
|
char *message; //Penser au free en fin de programme pour libérer l'espace mémoire
|
||||||
|
int envoi = -1;
|
||||||
|
int lg_pdu=50;
|
||||||
|
int lg_recv=-1;
|
||||||
|
int lg;
|
||||||
|
int nb;
|
||||||
|
char *pdu = malloc(lg_pdu*sizeof(char));
|
||||||
|
|
||||||
|
//---------------------------------------
|
||||||
|
//--------Etablissement connexion--------
|
||||||
|
//---------------------------------------
|
||||||
|
|
||||||
|
sprintf(pdu,"1 %d",nBAL);
|
||||||
|
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
|
||||||
|
{
|
||||||
|
printf("Erreur à l'ouverture du Socket Stream");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Construction adresse socket distant
|
||||||
|
memset((char *) &addr_distant, 0, sizeof(addr_distant));
|
||||||
|
addr_distant.sin_family = AF_INET; //Internet
|
||||||
|
addr_distant.sin_port = port; //Numéro de Port
|
||||||
|
|
||||||
|
//Affectation IP
|
||||||
|
if ((hp = gethostbyname(dest)) == NULL) {
|
||||||
|
printf("Erreur de requête IP.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy((char *) &(addr_distant.sin_addr.s_addr), hp->h_addr, hp->h_length);
|
||||||
|
|
||||||
|
//Demande de connexion
|
||||||
|
|
||||||
|
if (connect(sock, (struct sockaddr *) &addr_distant, sizeof(addr_distant)) == -1) {
|
||||||
|
printf("Erreur lors de la connexion, en attente de la tentative suivante \n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------
|
||||||
|
//----------------Envoi PDU----------------
|
||||||
|
//-----------------------------------------
|
||||||
|
|
||||||
|
if ((envoi = write(sock, pdu, lg_pdu)) == -1) /*,0,(struct sockaddr*)&addr_distant,lg_addr_distant)*/
|
||||||
|
{
|
||||||
|
printf("Echec de l'envoi du PDU Emetteur (fonction write en défaut)\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
char*lgmsg=malloc(maxsize* sizeof(char));
|
||||||
|
nb=10;
|
||||||
|
int n=1;
|
||||||
|
lg_recv=1;
|
||||||
|
printf(" PUITS : Réception du contenu de la BAL n°%d\n",nBAL);
|
||||||
|
printf("____________________________________________________________________\n\n");
|
||||||
|
|
||||||
|
while(n<=nb)
|
||||||
|
{
|
||||||
|
if ((lg_recv=read(sock,lgmsg,lg_pdu))==-1)
|
||||||
|
{
|
||||||
|
printf("Erreur à la réception du PDU de longueur de message\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
sscanf(lgmsg,"%d %d", &lg , &nb);
|
||||||
|
if (lg==-1)
|
||||||
|
{
|
||||||
|
printf(" ATTENTION : Pas de courrier à récupérer dans la BAL n°%d\n\n",nBAL);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
message=malloc(lg*sizeof(char));
|
||||||
|
if ((lg_recv=read(sock,message,lg))==-1)
|
||||||
|
{
|
||||||
|
printf("Erreur à la réception du message\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
printf("PUITS : Réception de la lettre n°%d : [",n);
|
||||||
|
afficher_message(message,lg);
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Fermeture de la Connexion\n");
|
||||||
|
//Ciao le socket
|
||||||
|
if(close(sock)==-1)
|
||||||
|
{
|
||||||
|
printf("Impossible de fermer le socket");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
5
makefile
5
makefile
|
@ -1,3 +1,2 @@
|
||||||
tsock: tsock_p2.c tsock.h
|
tsock: tsock_vf.c tsock.h bal.h
|
||||||
gcc tsock_p2.c -o tsock_p2 -g
|
gcc tsock_vf.c -o tsock -g
|
||||||
|
|
122
readme.txt
Normal file
122
readme.txt
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
__________________________________________________________________________
|
||||||
|
|| Projet de Programmation C orientée réseaux ||
|
||||||
|
|| ||
|
||||||
|
|| Prénom : Béranger ||
|
||||||
|
|| Nom : Quintana ||
|
||||||
|
|| Groupe : 3AE E ||
|
||||||
|
||______________________________________________________________________||
|
||||||
|
|
||||||
|
Bonjour, bienvenue sur ce programme d'échanges basé sur les protocoles TCP et UDP.
|
||||||
|
Avec ce programme vous pourrez utiliser ces protocoles sous différentes formes :
|
||||||
|
|
||||||
|
-De manière classique, avec un puits (-p) qui reçoit les informations d'une source (-s)
|
||||||
|
-Avec une nouvelle fonctionnalité de serveur de Boite aux Lettres
|
||||||
|
|
||||||
|
La fonctionnalité qui sera lancée au démarrage du programme sera celle de BAL.
|
||||||
|
|
||||||
|
________________________________________________________________________________________________________________________
|
||||||
|
Lancement de tsock
|
||||||
|
________________________________________________________________________________________________________________________
|
||||||
|
|
||||||
|
Pour lancer le programme, ouvrez un terminal dans le répertoire de travail, puis tapez la commande :
|
||||||
|
|
||||||
|
make
|
||||||
|
|
||||||
|
Cela compilera vos fichiers. Vous pourrez par la suite lancer vos différents programmes.
|
||||||
|
________________________________________________________________________________________________________________________
|
||||||
|
USAGE de la Boite Aux Lettres
|
||||||
|
________________________________________________________________________________________________________________________
|
||||||
|
==========================
|
||||||
|
LANCEMENT D'UN SERVEUR BAL
|
||||||
|
==========================
|
||||||
|
Ici on peut lancer un serveur de Boites aux lettres sur une adresse IP et un port donné. Ce serveur se comporte comme
|
||||||
|
une boucle infinie qui stocke les messages entrants dans des Boites aux lettres et les délivre par la suite après
|
||||||
|
requête d'un récepteur.
|
||||||
|
|
||||||
|
Pour lancer notre serveur BAL, il faut utiliser l'option -b du programme et lui attribuer un port d'écoute
|
||||||
|
Exemple, je veux lancer un serveur BAL sur le port 9000 :
|
||||||
|
Commande à utiliser :
|
||||||
|
./tsock -b 9000
|
||||||
|
|
||||||
|
====================
|
||||||
|
EMISSION DE MESSAGES
|
||||||
|
====================
|
||||||
|
|
||||||
|
Pour envoyer une ou plusieurs lettres, à un boite aux lettres, il faut utiliser l'option -e# du programme avec # le
|
||||||
|
numéro de Boite aux lettres destinataire, ainsi que fournir l'adresse IP du serveur, et le port d'écoute.
|
||||||
|
Exemple je veux envoyer des messages à la BAL n°5 sur l'IP 127.0.0.1, sur le port 9000
|
||||||
|
Commande à utiliser :
|
||||||
|
./tsock -e5 127.0.0.1 9000
|
||||||
|
|
||||||
|
NB : si vous ne précisez pas le numéro de BAL cela envoira par défaut sur la BAL n°0
|
||||||
|
|
||||||
|
Options disponibles pour l'émetteur :
|
||||||
|
-n# : fixe le nombre de message à émettre avec # le nombre de messages
|
||||||
|
-l# : fixe la longueur des messages à émettre avec # la longueur des messages pour cet envoi.
|
||||||
|
ATTENTION : On ne peut pas envoyer de messages plus court que les messages présents dans la BAL sous peine de
|
||||||
|
rogner les messages ces derniers. Le programme ne vous en informera pas lors de l'envoi...
|
||||||
|
En revanche, on peut envoyer des messages plus long que ceux précédemment envoyés.
|
||||||
|
|
||||||
|
=====================
|
||||||
|
RECEPTION DE MESSAGES
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Pour récupérer les lettres d'une boite aux lettres le principe est le même :
|
||||||
|
Exemple : Je veux récupérer les lettres de la BAL n°5, à l'IP 127.0.0.1, sur le port 9000 :
|
||||||
|
Commande à utiliser :
|
||||||
|
./tsock -r5 localhost 9000
|
||||||
|
|
||||||
|
Vous ne pouvez ici que récupérer l'ensemble des lettres disponibles dans une des Boites aux lettres.
|
||||||
|
Les options -n et -l ne sont donc pas utilisables.
|
||||||
|
|
||||||
|
========================================================================================================================
|
||||||
|
========================================================================================================================
|
||||||
|
|
||||||
|
Avec ces fichiers vous pourrez également utiliser TCP et UDP dans des usages plus classiques d'envois et réceptions
|
||||||
|
directes
|
||||||
|
|
||||||
|
________________________________________________________________________________________________________________________
|
||||||
|
USAGE CLASSIQUE
|
||||||
|
________________________________________________________________________________________________________________________
|
||||||
|
|
||||||
|
-Il est nécessaire d'activer le puits en premier et en lui attribuant une adresse IP distante ainsi qu'un
|
||||||
|
numéro de port
|
||||||
|
Exemple : Je veux recevoir depuis l'hôte local sur le port 9000
|
||||||
|
Commande à utiliser :
|
||||||
|
./tsock -p localhost 9000
|
||||||
|
|
||||||
|
Seulement après avoir activé notre puits, on peut lancer notre source toujours en lui attribuant l'IP destinataire
|
||||||
|
et le numéro de port ou l'on veut envoyer nos informations.
|
||||||
|
Exemple : Je veux envoyer à destination de l'hote local sur le port 9000
|
||||||
|
Commande à utiliser :
|
||||||
|
./tsock -s localhost 9000
|
||||||
|
|
||||||
|
Liste des options :
|
||||||
|
|
||||||
|
-n : permet de fixer le nombre de messages à envoyer (par défaut : 10)
|
||||||
|
-l : permet de fixer la longueur des messages à envoyer (par défaut 30)
|
||||||
|
-u : permet d'utiliser le protocole UDP car TCP est utilisé par défaut
|
||||||
|
|
||||||
|
Pour l'usage classique, il est important que l'utilisateur du puits, paramètre correctement la longueur des
|
||||||
|
messages à recevoir pour pouvoir les recevoir correctement, sinon, la longueur par défaut sera de 30 caractères.
|
||||||
|
|
||||||
|
De plus, concernant le nombre de messages, si l'utilisateur du puits utilise l'option -n, et que le n du puits
|
||||||
|
est inférieur au -n du récepteur, il ne recevra pas les denrniers messages.
|
||||||
|
|
||||||
|
________________________________________________________________________________________________________________________
|
||||||
|
Remarques Générales
|
||||||
|
________________________________________________________________________________________________________________________
|
||||||
|
|
||||||
|
-En principe, l'utilisation de fonctions de la partie Classique sur une serveur BAL ne fonctionne pas.
|
||||||
|
Par exemple, l'envoi depuis une source TCP (-s) vers un serveur BAL (-b) en fonctionnement contenant déjà des
|
||||||
|
lettres, enverra les lettres sur la dernière BAL utilisée. L'envoi depuis une source vers un serveur BAL ne
|
||||||
|
contenant pas de lettres sera bloquant. Il faudra relancer le serveur BAL pour pouvoir recevoir des lettres.
|
||||||
|
|
||||||
|
-La problématique de la longueur des messages à recevoir côté serveur n'a pas pu être traitée par manque de
|
||||||
|
temps.
|
||||||
|
|
||||||
|
-Il reste surement des coquilles....
|
||||||
|
|
||||||
|
Si besoin, n'hésitez pas à me contacter : bquintan@etud.insa-toulouse.fr
|
||||||
|
|
||||||
|
Bonne correction!
|
BIN
tsock
Normal file
BIN
tsock
Normal file
Binary file not shown.
208
tsock.h
208
tsock.h
|
@ -1,16 +1,13 @@
|
||||||
//--------------------------PROG C ET RESEAUX-----------------------
|
//--------------------------PROG C ET RESEAUX-----------------------
|
||||||
//Nom : Quintana -----------------------------------------------
|
// Nom : Quintana
|
||||||
//Prénom : Béranger -----------------------------------------------
|
// Prénom : Béranger
|
||||||
//Groupe : 3AE E -----------------------------------------------
|
// Grp : 3AE E
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
|
|
||||||
#ifndef __tsock__
|
#ifndef __tsock__
|
||||||
|
|
||||||
//---------------------------------------------------
|
//---------------------------------------------------
|
||||||
//-------------Déclaration des fonctions-------------
|
//-------------Déclaration des fonctions-------------
|
||||||
//---------------------------------------------------
|
//---------------------------------------------------
|
||||||
|
|
||||||
void construire_message(char *message, char motif, int lg, int i);
|
|
||||||
void construire_message2(char *message, char motif, int lg, int i);
|
void construire_message2(char *message, char motif, int lg, int i);
|
||||||
void afficher_message(char *message, int lg);
|
void afficher_message(char *message, int lg);
|
||||||
void envoi_UDP(int port, int nb_message , int lg_msg, char*dest);
|
void envoi_UDP(int port, int nb_message , int lg_msg, char*dest);
|
||||||
|
@ -19,71 +16,39 @@ void ClientTCP (int port, int nb_message , int lg_msg, char* dest);
|
||||||
void ServeurTCP(int port , int nb_message, int lg_msg);
|
void ServeurTCP(int port , int nb_message, int lg_msg);
|
||||||
void printbuffer(int n);
|
void printbuffer(int n);
|
||||||
void printbuffer2(int n , char*message);
|
void printbuffer2(int n , char*message);
|
||||||
|
//---------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------------------------
|
//---------------------------------------------------
|
||||||
//-------------Définitions des fonctions-------------
|
//-------------Définitions des fonctions-------------
|
||||||
//---------------------------------------------------
|
//---------------------------------------------------
|
||||||
|
//---------------------------------------------------
|
||||||
|
|
||||||
//-------------Construire message 2 -----------------
|
//---------------------------------------------------
|
||||||
|
//-------------Construire message 2 ----------------- : Construit notre message à partir de l'alphabet
|
||||||
|
//---------------------------------------------------
|
||||||
void construire_message2(char *message, char motif, int lg, int i)
|
void construire_message2(char *message, char motif, int lg, int i)
|
||||||
{
|
{
|
||||||
|
|
||||||
char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
|
char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
|
||||||
if (i>26)
|
if (i>=27)
|
||||||
motif=alphabet[i%26-1];
|
{
|
||||||
else if (i=26)
|
if (i%26==0)
|
||||||
motif = 'z';
|
motif = 'z';
|
||||||
|
else
|
||||||
|
motif = alphabet[i%26-1];
|
||||||
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
motif=alphabet[i - 1];
|
motif=alphabet[i - 1];
|
||||||
|
|
||||||
|
|
||||||
for (int j=0;j<lg-5;j++)
|
for (int j=0;j<lg-5;j++)
|
||||||
{
|
{
|
||||||
|
|
||||||
*(message+j+5) = motif;
|
*(message+j+5) = motif;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------PRINTBUFFER-----------------------
|
|
||||||
void printbuffer(int n)
|
|
||||||
{
|
|
||||||
if (n<10)
|
|
||||||
{
|
|
||||||
printf("[----%d",n);
|
|
||||||
}
|
|
||||||
if (n>=10 & n<100)
|
|
||||||
{
|
|
||||||
printf("[---%d",n);
|
|
||||||
}
|
|
||||||
if (n>=100 & n<1000)
|
|
||||||
{
|
|
||||||
printf("[--%d",n);
|
|
||||||
}
|
|
||||||
if (n>=1000 & n<10000)
|
|
||||||
{
|
|
||||||
printf("[--%d",n);
|
|
||||||
}
|
|
||||||
if (n>=10000 & n<100000)
|
|
||||||
{
|
|
||||||
printf("[-%d",n);
|
|
||||||
}
|
|
||||||
if (n>=100000 & n<1000000)
|
|
||||||
{
|
|
||||||
printf("[%d",n);
|
|
||||||
}
|
|
||||||
if (n>=1000000)
|
|
||||||
{
|
|
||||||
printf("Trop de messages à envoyer (n>1000000 \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
//----------------------------------------------------
|
||||||
//------------------PRINTBUFFER2----------------------
|
//------------------PRINTBUFFER2---------------------- : Modifie la variable message pour écrire le buffer ----# avec # le numéro d'envoi
|
||||||
|
//----------------------------------------------------
|
||||||
void printbuffer2(int n , char*message)
|
void printbuffer2(int n , char*message)
|
||||||
{
|
{
|
||||||
if (n>=100000)
|
if (n>=100000)
|
||||||
|
@ -175,55 +140,24 @@ void printbuffer2(int n , char*message)
|
||||||
sprintf(nb,"%d", n);
|
sprintf(nb,"%d", n);
|
||||||
*(message+4)=*nb;
|
*(message+4)=*nb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Construction des messages
|
//----------------------------------------------------
|
||||||
|
//-------------Affichage des messages-----------------
|
||||||
void construire_message(char *message, char motif, int lg, int i )
|
//----------------------------------------------------
|
||||||
|
|
||||||
{
|
|
||||||
char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
|
|
||||||
if (i>26)
|
|
||||||
motif=alphabet[i%26-1];
|
|
||||||
|
|
||||||
else
|
|
||||||
motif = alphabet[i - 1];
|
|
||||||
|
|
||||||
|
|
||||||
for (int j=0;j<lg-5;j++)
|
|
||||||
{
|
|
||||||
|
|
||||||
*(message+j) = motif;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//---------------------------------------------------
|
|
||||||
//-------------Affichage des messages----------------
|
|
||||||
//---------------------------------------------------
|
|
||||||
|
|
||||||
void afficher_message(char *message, int lg)
|
void afficher_message(char *message, int lg)
|
||||||
|
|
||||||
{
|
{
|
||||||
|
for (int i=0;i<lg;i++)
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i=0;i<lg;i++)
|
|
||||||
{
|
|
||||||
printf("%c", *(message+i));
|
printf("%c", *(message+i));
|
||||||
}
|
|
||||||
printf("]\n");
|
printf("]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------
|
//----------------------------------------------------
|
||||||
//----------------Envoi UDP---------------------------
|
//--------------------Envoi UDP-----------------------
|
||||||
//----------------------------------------------------
|
//----------------------------------------------------
|
||||||
|
|
||||||
void envoi_UDP(int port ,int nb_mess , int lg_msg,char*dest)
|
void envoi_UDP(int port ,int nb_mess , int lg_msg,char*dest)
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
int length_addr_dist;
|
int length_addr_dist;
|
||||||
|
@ -250,16 +184,13 @@ void envoi_UDP(int port ,int nb_mess , int lg_msg,char*dest)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//printf("Après gethostbyname , nb_message= %d\n",nb_mess);
|
|
||||||
|
|
||||||
memcpy((char*)&(addr_distant.sin_addr.s_addr), hp->h_addr, hp->h_length);
|
memcpy((char*)&(addr_distant.sin_addr.s_addr), hp->h_addr, hp->h_length);
|
||||||
//printf("Association IP OK\n");
|
|
||||||
//printf("Nombre de messages à envoyer : %d\n", nb_mess);
|
|
||||||
|
|
||||||
for (int i=1; i<=nb_mess ; i++)
|
for (int i=1; i<=nb_mess ; i++)
|
||||||
{
|
{
|
||||||
construire_message(message,'a',lg_msg,i);
|
printbuffer2(i,message);
|
||||||
printf("SOURCE : Envoi n°%d (%d) [", i, lg_msg);
|
construire_message2(message,'a',lg_msg,i);
|
||||||
|
printf("SOURCE : Envoi n°%d (%d) : [", i, lg_msg);
|
||||||
|
|
||||||
|
|
||||||
if((sent=sendto(sock,message,lg_msg,0,(struct sockaddr*)&addr_distant,sizeof(addr_distant)))==-1)
|
if((sent=sendto(sock,message,lg_msg,0,(struct sockaddr*)&addr_distant,sizeof(addr_distant)))==-1)
|
||||||
|
@ -267,7 +198,6 @@ void envoi_UDP(int port ,int nb_mess , int lg_msg,char*dest)
|
||||||
printf("Erreur sendto\n");
|
printf("Erreur sendto\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
printbuffer2(i,message);
|
|
||||||
afficher_message(message,sent);
|
afficher_message(message,sent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -309,29 +239,31 @@ void reception_UDP(int port, int nb_message, int lg_message)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//printf("bind OK\n");
|
|
||||||
|
|
||||||
if (nb_message==-1)
|
|
||||||
nb_message=10;
|
|
||||||
|
|
||||||
//printf("%d messages à recevoir\n",nb_message);
|
|
||||||
lg_dist=sizeof(addr_distant);
|
lg_dist=sizeof(addr_distant);
|
||||||
//printf("lg_dist initialisé\n");
|
|
||||||
|
|
||||||
for (int i=1 ; i<=nb_message ; i++)
|
int i=1;
|
||||||
|
while(recv!=0)
|
||||||
{
|
{
|
||||||
|
|
||||||
recv=recvfrom(sock,message,lg_message,0,(struct sockaddr*)&addr_distant,&lg_dist);
|
recv=recvfrom(sock,message,lg_message,0,(struct sockaddr*)&addr_distant,&lg_dist);
|
||||||
if (recv==-1) //process de réception (recvfrom natif à l'API socket, + test erreur
|
if (recv==-1) //process de réception (recvfrom natif à l'API socket, + test erreur
|
||||||
{
|
{
|
||||||
printf("Erreur receive from\n");
|
printf("Erreur receive from\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (recv!=0)
|
||||||
{
|
{
|
||||||
printf("PUITS : Réception n°%d (%d) :",i,lg_message);
|
printf("PUITS : Réception n°%d (%d) : [",i,lg_message);
|
||||||
afficher_message(message,recv);
|
afficher_message(message,recv);
|
||||||
}
|
}
|
||||||
|
if (i==nb_message)
|
||||||
|
{
|
||||||
|
recv=0;
|
||||||
|
printf("On a atteint le nombre de messages à recevoir\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(close(sock)==-1) //fermeture + test erreur à la fermeture
|
if(close(sock)==-1) //fermeture + test erreur à la fermeture
|
||||||
|
@ -341,10 +273,9 @@ void reception_UDP(int port, int nb_message, int lg_message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------
|
//----------------------------------------------------
|
||||||
//----------------ClientTCP <=> source=1-------------------------
|
// ----------------ClientTCP <=> source=1-------------
|
||||||
//---------------------------------------------------------------
|
//----------------------------------------------------
|
||||||
|
|
||||||
void ClientTCP (int port, int nb_message , int lg_msg , char* dest)
|
void ClientTCP (int port, int nb_message , int lg_msg , char* dest)
|
||||||
{
|
{
|
||||||
//Déclarations
|
//Déclarations
|
||||||
|
@ -354,12 +285,10 @@ void ClientTCP (int port, int nb_message , int lg_msg , char* dest)
|
||||||
|
|
||||||
struct hostent *hp;
|
struct hostent *hp;
|
||||||
char motif;
|
char motif;
|
||||||
char * message=malloc(lg_msg*sizeof(char)); //Penser au free en fin de programme pour libérer l'espace mémoire
|
char * message=malloc(lg_msg*sizeof(char));
|
||||||
int envoi=-1;
|
int envoi=-1;
|
||||||
|
|
||||||
//---------------------------------------
|
|
||||||
//--------Etablissement connexion--------
|
//--------Etablissement connexion--------
|
||||||
//---------------------------------------
|
|
||||||
|
|
||||||
//Création socket
|
//Création socket
|
||||||
if((sock=socket(AF_INET,SOCK_STREAM,0))==-1)
|
if((sock=socket(AF_INET,SOCK_STREAM,0))==-1)
|
||||||
|
@ -387,21 +316,19 @@ void ClientTCP (int port, int nb_message , int lg_msg , char* dest)
|
||||||
if (connect(sock,(struct sockaddr *)&addr_distant,sizeof(addr_distant))==-1)
|
if (connect(sock,(struct sockaddr *)&addr_distant,sizeof(addr_distant))==-1)
|
||||||
{
|
{
|
||||||
printf("Erreur lors de la connexion, en attente de la tentative suivante \n");
|
printf("Erreur lors de la connexion, en attente de la tentative suivante \n");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//printf("Connexion Réussie !\n");
|
//Connexion Réussie !
|
||||||
|
|
||||||
//-----------------------------------------
|
|
||||||
//----------TRANSFERT DE DONNEES-----------
|
//----------TRANSFERT DE DONNEES-----------
|
||||||
//-----------------------------------------
|
|
||||||
|
|
||||||
for (int i=1; i<=nb_message;i++)
|
for (int i=1; i<=nb_message;i++)
|
||||||
{
|
{
|
||||||
printf("SOURCE : envoi n°%d (%d) [", i,lg_msg);
|
printf("SOURCE : envoi n°%d (%d) [", i,lg_msg);
|
||||||
//Création du message
|
//Création du message
|
||||||
|
|
||||||
construire_message(message,motif,lg_msg,i);
|
construire_message2(message,motif,lg_msg,i);
|
||||||
|
|
||||||
printbuffer2(i,message);
|
printbuffer2(i,message);
|
||||||
afficher_message(message,lg_msg);
|
afficher_message(message,lg_msg);
|
||||||
|
@ -430,13 +357,11 @@ void ClientTCP (int port, int nb_message , int lg_msg , char* dest)
|
||||||
}
|
}
|
||||||
|
|
||||||
free(message);
|
free(message);
|
||||||
|
|
||||||
printf("Envoi effectué avec succès\n");
|
printf("Envoi effectué avec succès\n");
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------
|
||||||
//---------------------------------------------------------------
|
//----------------ServeurTCP <=> source=0---------------------
|
||||||
//----------------ServeurTCP <=> source=0-------------------------
|
//------------------------------------------------------------
|
||||||
//---------------------------------------------------------------
|
|
||||||
|
|
||||||
void ServeurTCP(int port , int nb_message, int lg_msg)
|
void ServeurTCP(int port , int nb_message, int lg_msg)
|
||||||
{
|
{
|
||||||
|
@ -451,9 +376,7 @@ void ServeurTCP(int port , int nb_message, int lg_msg)
|
||||||
char * message=malloc(lg_msg*sizeof(char)); //Penser au free en fin de programme pour libérer l'espace mémoire
|
char * message=malloc(lg_msg*sizeof(char)); //Penser au free en fin de programme pour libérer l'espace mémoire
|
||||||
int lg_recv=-1;
|
int lg_recv=-1;
|
||||||
|
|
||||||
//-------------
|
//-----------------Connexion --------------
|
||||||
//Connexion ---
|
|
||||||
//-------------
|
|
||||||
|
|
||||||
//Création socket local
|
//Création socket local
|
||||||
|
|
||||||
|
@ -469,9 +392,6 @@ void ServeurTCP(int port , int nb_message, int lg_msg)
|
||||||
addr_local.sin_family=AF_INET;
|
addr_local.sin_family=AF_INET;
|
||||||
addr_local.sin_addr.s_addr=INADDR_ANY;
|
addr_local.sin_addr.s_addr=INADDR_ANY;
|
||||||
addr_local.sin_port=port;
|
addr_local.sin_port=port;
|
||||||
|
|
||||||
//printf("Socket créé addressé\n");
|
|
||||||
|
|
||||||
//Bind
|
//Bind
|
||||||
|
|
||||||
if (bind(sock,(struct sockaddr *)&addr_local, lg_addr_local)==-1)
|
if (bind(sock,(struct sockaddr *)&addr_local, lg_addr_local)==-1)
|
||||||
|
@ -479,7 +399,6 @@ void ServeurTCP(int port , int nb_message, int lg_msg)
|
||||||
printf("Echec du bind.\n");
|
printf("Echec du bind.\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
//printf("bind effectué\n");
|
|
||||||
|
|
||||||
//Check connexions entrantes
|
//Check connexions entrantes
|
||||||
|
|
||||||
|
@ -489,51 +408,44 @@ void ServeurTCP(int port , int nb_message, int lg_msg)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//rintf("listen accepté\n");
|
|
||||||
|
|
||||||
|
|
||||||
//Accept connexion
|
//Accept connexion
|
||||||
|
|
||||||
|
|
||||||
if (nb_message==-1)
|
if (nb_message==-1)
|
||||||
{
|
|
||||||
nb_message=10;
|
nb_message=10;
|
||||||
}
|
|
||||||
if ((sock2 = accept(sock,(struct sockaddr*)&addr_distant,&lg_addr_distant))==-1)
|
if ((sock2 = accept(sock,(struct sockaddr*)&addr_distant,&lg_addr_distant))==-1)
|
||||||
{
|
{
|
||||||
printf("Refus de connexion par le serveur\n");
|
printf("Refus de connexion par le serveur\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
//printf("Accept validé, %d messages à recevoir\n",nb_message);
|
|
||||||
//Reception des messages au niveau du socket d'échange
|
//Reception des messages au niveau du socket d'échange
|
||||||
|
|
||||||
for (int i=1;i<=nb_message;i++)
|
//--------------Reception des données-----------
|
||||||
|
int i=1;
|
||||||
|
while(lg_recv!=0)
|
||||||
{
|
{
|
||||||
printf("PUITS : Réception n°%d (%d) [" , i , lg_msg);
|
|
||||||
if((lg_recv=read(sock2,message, lg_msg))<0)
|
if((lg_recv=read(sock2,message, lg_msg))<0)
|
||||||
{
|
{
|
||||||
printf("Echec de la lecture du message entrant \n");
|
printf("Echec de la lecture du message entrant \n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
afficher_message(message, lg_recv);
|
if (lg_recv!=0)
|
||||||
}
|
|
||||||
//Fermeture connexion
|
|
||||||
|
|
||||||
if ((shutdown(sock , 2))==-1)
|
|
||||||
{
|
{
|
||||||
printf("Erreur à la fermeture de la connexion : shutdown\n");
|
printf("PUITS : Réception n°%d (%d) [" , i , lg_msg);
|
||||||
exit(1);
|
afficher_message(message, lg_recv);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Ciao le socket
|
//Ciao le socket
|
||||||
if(close(sock)==-1)
|
if(close(sock)==-1)
|
||||||
{
|
{
|
||||||
printf("Impossible de fermer le socket");
|
printf("Impossible de fermer le socket");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(message);
|
free(message);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
BIN
tsock_p2
BIN
tsock_p2
Binary file not shown.
240
tsock_p2.c
240
tsock_p2.c
|
@ -1,240 +0,0 @@
|
||||||
//--------------------------PROG C ET RESEAUX-----------------------
|
|
||||||
//Nom : Quintana -----------------------------------------------
|
|
||||||
//Prénom : Béranger -----------------------------------------------
|
|
||||||
//Groupe : 3AE E -----------------------------------------------
|
|
||||||
//------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
/* librairie standard ... */
|
|
||||||
#include <stdlib.h>
|
|
||||||
/* pour getopt */
|
|
||||||
#include <unistd.h>
|
|
||||||
/* déclaration des types de base */
|
|
||||||
#include <sys/types.h>
|
|
||||||
/* constantes relatives aux domaines, types et protocoles */
|
|
||||||
#include <sys/socket.h>
|
|
||||||
/* constantes et structures propres au domaine UNIX */
|
|
||||||
#include <sys/un.h>
|
|
||||||
/* constantes et structures propres au domaine INTERNET */
|
|
||||||
#include <netinet/in.h>
|
|
||||||
/* structures retournées par les fonctions de gestion de la base de
|
|
||||||
données du réseau */
|
|
||||||
#include <netdb.h>
|
|
||||||
/* pour les entrées/sorties */
|
|
||||||
#include <stdio.h>
|
|
||||||
/* pour la gestion des erreurs */
|
|
||||||
#include <errno.h>
|
|
||||||
/* fonctions de tsock*/
|
|
||||||
#include "tsock.h"
|
|
||||||
/*fonctions de BAL*/
|
|
||||||
#include "bal.h"
|
|
||||||
/* pour afficher l'adresse d'un socket */
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
Programme Principal
|
|
||||||
**********************************************************************/
|
|
||||||
|
|
||||||
void main (int argc, char **argv)
|
|
||||||
{
|
|
||||||
|
|
||||||
//Déclarations
|
|
||||||
|
|
||||||
int c;
|
|
||||||
extern char *optarg;
|
|
||||||
extern int optind;
|
|
||||||
int nb_message = -1; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */
|
|
||||||
int source = -1 ; /* 0=puits, 1=source */
|
|
||||||
int tcp=1; //tcp=1 => tcp ; tcp=0 =>udp
|
|
||||||
struct hostent *hp;
|
|
||||||
int bal=-1;
|
|
||||||
int port = -1; //Numéro de port
|
|
||||||
int recep=-1;
|
|
||||||
port =htons(port);
|
|
||||||
|
|
||||||
char *dest ;
|
|
||||||
int lg =30;
|
|
||||||
|
|
||||||
while ((c = getopt(argc, argv, "pn:sul:be:r:")) != -1)
|
|
||||||
{
|
|
||||||
|
|
||||||
switch (c)
|
|
||||||
{
|
|
||||||
case 'p':
|
|
||||||
if (source == 1)
|
|
||||||
{
|
|
||||||
printf("usage: cmd [-p|-s][-n ##]\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
source = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 's':
|
|
||||||
if (source == 0)
|
|
||||||
{
|
|
||||||
printf("usage: cmd [-p|-s][-n ##]\n");
|
|
||||||
exit(1) ;
|
|
||||||
}
|
|
||||||
dest=argv[argc-2];
|
|
||||||
source = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'n':
|
|
||||||
nb_message = atoi(optarg);
|
|
||||||
if (nb_message>100000)
|
|
||||||
{
|
|
||||||
printf("Trop d'envois, n> 100 000\n");
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'u':
|
|
||||||
tcp=0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'l':
|
|
||||||
lg = atoi(optarg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'b' :
|
|
||||||
bal=1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'e' :
|
|
||||||
if (recep==1)
|
|
||||||
{
|
|
||||||
printf("On ne peut pas être émetteur et récepteur, -r ou -e, pas les deux\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
bal=1;
|
|
||||||
recep=0;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'r' :
|
|
||||||
if (recep==0)
|
|
||||||
{
|
|
||||||
printf("On ne peut être émetteur et récepteur en même temps : -e ou -r mais pas les deux\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
bal=1;
|
|
||||||
recep=1;
|
|
||||||
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
default:
|
|
||||||
printf("usage: cmd [-p|-s|-b|-e|-r][-n ##]\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((port=atoi(argv[argc-1]))!=-1)
|
|
||||||
{
|
|
||||||
port=htons(port);
|
|
||||||
}
|
|
||||||
dest=argv[argc-2];
|
|
||||||
|
|
||||||
if (source == -1 & bal ==-1)
|
|
||||||
{
|
|
||||||
printf("usage: cmd [-p|-s][-n ##]\n");
|
|
||||||
exit(1) ;
|
|
||||||
}
|
|
||||||
if (bal == -1)
|
|
||||||
{
|
|
||||||
if (source == 1)
|
|
||||||
printf("SOURCE : ");
|
|
||||||
else
|
|
||||||
printf("PUITS : ");
|
|
||||||
|
|
||||||
|
|
||||||
if (tcp==1)
|
|
||||||
printf("Protocole de transport : TCP | ");
|
|
||||||
|
|
||||||
else
|
|
||||||
printf("Protocole de transport : UDP | ");
|
|
||||||
|
|
||||||
if (nb_message == -1)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (source == 1)
|
|
||||||
{
|
|
||||||
nb_message = 10;
|
|
||||||
printf("Nombre d'envois : %d | ", nb_message);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
printf("Nombre de receptions : infini | ");
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (source == 1)
|
|
||||||
{
|
|
||||||
|
|
||||||
printf("Nombre d'envois = %d | ", nb_message);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf("nb de tampons à recevoir = %d | ",nb_message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("Destinataire : %s\n", dest);
|
|
||||||
|
|
||||||
|
|
||||||
//Envoi de message, Source en UDP
|
|
||||||
|
|
||||||
int length_addr_dist;
|
|
||||||
length_addr_dist=sizeof(struct sockaddr_in);
|
|
||||||
|
|
||||||
|
|
||||||
if(source==1 & tcp==0)
|
|
||||||
{
|
|
||||||
envoi_UDP(port,nb_message,lg,dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
//PUITS de réception en UDP
|
|
||||||
|
|
||||||
else if (source==0 & tcp==0)
|
|
||||||
{
|
|
||||||
reception_UDP(port,nb_message,lg);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
else if (source==0 & tcp==1)
|
|
||||||
{
|
|
||||||
|
|
||||||
ServeurTCP(port, nb_message, lg);
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (source==1 & tcp==1)
|
|
||||||
{
|
|
||||||
|
|
||||||
ClientTCP(port,nb_message,lg,dest);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (bal==1 &recep==0)
|
|
||||||
{
|
|
||||||
printf("On fait un serveur BAL\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (bal==1 & recep ==0)
|
|
||||||
{
|
|
||||||
printf("On est emetteur de lettres\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
else if(bal==1 &recep == 1)
|
|
||||||
{
|
|
||||||
printf("On récupère des lettres \n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
exit(0);
|
|
||||||
}
|
|
80
tsock_v0.c
80
tsock_v0.c
|
@ -1,80 +0,0 @@
|
||||||
/* librairie standard ... */
|
|
||||||
#include <stdlib.h>
|
|
||||||
/* pour getopt */
|
|
||||||
#include <unistd.h>
|
|
||||||
/* déclaration des types de base */
|
|
||||||
#include <sys/types.h>
|
|
||||||
/* constantes relatives aux domaines, types et protocoles */
|
|
||||||
#include <sys/socket.h>
|
|
||||||
/* constantes et structures propres au domaine UNIX */
|
|
||||||
#include <sys/un.h>
|
|
||||||
/* constantes et structures propres au domaine INTERNET */
|
|
||||||
#include <netinet/in.h>
|
|
||||||
/* structures retournées par les fonctions de gestion de la base de
|
|
||||||
données du réseau */
|
|
||||||
#include <netdb.h>
|
|
||||||
/* pour les entrées/sorties */
|
|
||||||
#include <stdio.h>
|
|
||||||
/* pour la gestion des erreurs */
|
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
void main (int argc, char **argv)
|
|
||||||
{
|
|
||||||
int c;
|
|
||||||
extern char *optarg;
|
|
||||||
extern int optind;
|
|
||||||
int nb_message = -1; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */
|
|
||||||
int source = -1 ; /* 0=puits, 1=source */
|
|
||||||
while ((c = getopt(argc, argv, "pn:s")) != -1) {
|
|
||||||
switch (c) {
|
|
||||||
case 'p':
|
|
||||||
if (source == 1) {
|
|
||||||
printf("usage: cmd [-p|-s][-n ##]\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
source = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 's':
|
|
||||||
if (source == 0) {
|
|
||||||
printf("usage: cmd [-p|-s][-n ##]\n");
|
|
||||||
exit(1) ;
|
|
||||||
}
|
|
||||||
source = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'n':
|
|
||||||
nb_message = atoi(optarg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
printf("usage: cmd [-p|-s][-n ##]\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (source == -1) {
|
|
||||||
printf("usage: cmd [-p|-s][-n ##]\n");
|
|
||||||
exit(1) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (source == 1)
|
|
||||||
printf("on est dans le source\n");
|
|
||||||
else
|
|
||||||
printf("on est dans le puits\n");
|
|
||||||
|
|
||||||
if (nb_message != -1) {
|
|
||||||
if (source == 1)
|
|
||||||
printf("nb de tampons à envoyer : %d\n", nb_message);
|
|
||||||
else
|
|
||||||
printf("nb de tampons à recevoir : %d\n", nb_message);
|
|
||||||
} else {
|
|
||||||
if (source == 1) {
|
|
||||||
nb_message = 10 ;
|
|
||||||
printf("nb de tampons à envoyer = 10 par défaut\n");
|
|
||||||
} else
|
|
||||||
printf("nb de tampons à envoyer = infini\n");
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
157
tsock_v1_1.c
157
tsock_v1_1.c
|
@ -1,157 +0,0 @@
|
||||||
//--------------------------PROG C ET RESEAUX-----------------------
|
|
||||||
//Nom : Quintana -----------------------------------------------
|
|
||||||
//Prénom : Béranger -----------------------------------------------
|
|
||||||
//Groupe : 3AE E -----------------------------------------------
|
|
||||||
//------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
/* librairie standard ... */
|
|
||||||
#include <stdlib.h>
|
|
||||||
/* pour getopt */
|
|
||||||
#include <unistd.h>
|
|
||||||
/* déclaration des types de base */
|
|
||||||
#include <sys/types.h>
|
|
||||||
/* constantes relatives aux domaines, types et protocoles */
|
|
||||||
#include <sys/socket.h>
|
|
||||||
/* constantes et structures propres au domaine UNIX */
|
|
||||||
#include <sys/un.h>
|
|
||||||
/* constantes et structures propres au domaine INTERNET */
|
|
||||||
#include <netinet/in.h>
|
|
||||||
/* structures retournées par les fonctions de gestion de la base de
|
|
||||||
données du réseau */
|
|
||||||
#include <netdb.h>
|
|
||||||
/* pour les entrées/sorties */
|
|
||||||
#include <stdio.h>
|
|
||||||
/* pour la gestion des erreurs */
|
|
||||||
#include <errno.h>
|
|
||||||
/* fonctions de tsock*/
|
|
||||||
#include "tsock.h"
|
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
Programme Principal
|
|
||||||
**********************************************************************/
|
|
||||||
|
|
||||||
void main (int argc, char **argv)
|
|
||||||
{
|
|
||||||
|
|
||||||
//Déclarations
|
|
||||||
|
|
||||||
int c;
|
|
||||||
extern char *optarg;
|
|
||||||
extern int optind;
|
|
||||||
int nb_message = -1; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */
|
|
||||||
int source = -1 ; /* 0=puits, 1=source */
|
|
||||||
int tcp=1; //tcp=1 => tcp ; tcp=0 =>udp
|
|
||||||
struct hostent *hp;
|
|
||||||
|
|
||||||
int port = -1; //Numéro de port
|
|
||||||
port =htons(port);
|
|
||||||
|
|
||||||
char *dest ;
|
|
||||||
int lg_local;
|
|
||||||
|
|
||||||
while ((c = getopt(argc, argv, "pn:su")) != -1) {
|
|
||||||
|
|
||||||
|
|
||||||
switch (c) {
|
|
||||||
case 'p':
|
|
||||||
if (source == 1) {
|
|
||||||
printf("usage: cmd [-p|-s][-n ##]\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
source = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 's':
|
|
||||||
if (source == 0) {
|
|
||||||
printf("usage: cmd [-p|-s][-n ##]\n");
|
|
||||||
exit(1) ;
|
|
||||||
}
|
|
||||||
dest=argv[argc-2];
|
|
||||||
source = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'n':
|
|
||||||
nb_message = atoi(optarg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'u':
|
|
||||||
if (tcp ==0){
|
|
||||||
printf("usage : cmd [-p| -s] [-u][-n##]\n");
|
|
||||||
}
|
|
||||||
tcp=0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
printf("usage: cmd [-p|-s][-n ##]\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((port=atoi(argv[argc-1]))!=-1)
|
|
||||||
{
|
|
||||||
port=htons(port);
|
|
||||||
}
|
|
||||||
dest=argv[argc-2];
|
|
||||||
|
|
||||||
|
|
||||||
if (source == -1)
|
|
||||||
{
|
|
||||||
printf("usage: cmd [-p|-s][-n ##]\n");
|
|
||||||
exit(1) ;
|
|
||||||
}
|
|
||||||
if (tcp==1)
|
|
||||||
{
|
|
||||||
printf("On utilise TCP\n");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{printf("On utilise UDP\n");}
|
|
||||||
|
|
||||||
|
|
||||||
if (source == 1)
|
|
||||||
printf("on est dans le source\n");
|
|
||||||
else
|
|
||||||
printf("on est dans le puits\n");
|
|
||||||
|
|
||||||
|
|
||||||
if (nb_message != -1)
|
|
||||||
{
|
|
||||||
if (source == 1)
|
|
||||||
printf("nb de tampons à envoyer : %d\n", nb_message);
|
|
||||||
else
|
|
||||||
printf("nb de tampons à recevoir : %d\n", nb_message);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (source == 1)
|
|
||||||
{
|
|
||||||
nb_message = 10 ;
|
|
||||||
printf("nb de tampons à envoyer = 10 par défaut\n");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
printf("nb de tampons à envoyer = infini\n");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//Envoi de message, Source en UDP
|
|
||||||
|
|
||||||
int length_addr_dist;
|
|
||||||
length_addr_dist=sizeof(struct sockaddr_in);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(source==1 & tcp==0)
|
|
||||||
{
|
|
||||||
envoi_UDP(nb_message,port,50);
|
|
||||||
}
|
|
||||||
|
|
||||||
//PUITS de réception en UDP
|
|
||||||
|
|
||||||
else if (source==0 & tcp==0)
|
|
||||||
{
|
|
||||||
reception_UDP(port,nb_message,50);
|
|
||||||
}
|
|
||||||
exit(0);
|
|
||||||
}
|
|
BIN
tsock_v3
BIN
tsock_v3
Binary file not shown.
189
tsock_v3.c
189
tsock_v3.c
|
@ -1,189 +0,0 @@
|
||||||
//--------------------------PROG C ET RESEAUX-----------------------
|
|
||||||
//Nom : Quintana -----------------------------------------------
|
|
||||||
//Prénom : Béranger -----------------------------------------------
|
|
||||||
//Groupe : 3AE E -----------------------------------------------
|
|
||||||
//------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
/* librairie standard ... */
|
|
||||||
#include <stdlib.h>
|
|
||||||
/* pour getopt */
|
|
||||||
#include <unistd.h>
|
|
||||||
/* déclaration des types de base */
|
|
||||||
#include <sys/types.h>
|
|
||||||
/* constantes relatives aux domaines, types et protocoles */
|
|
||||||
#include <sys/socket.h>
|
|
||||||
/* constantes et structures propres au domaine UNIX */
|
|
||||||
#include <sys/un.h>
|
|
||||||
/* constantes et structures propres au domaine INTERNET */
|
|
||||||
#include <netinet/in.h>
|
|
||||||
/* structures retournées par les fonctions de gestion de la base de
|
|
||||||
données du réseau */
|
|
||||||
#include <netdb.h>
|
|
||||||
/* pour les entrées/sorties */
|
|
||||||
#include <stdio.h>
|
|
||||||
/* pour la gestion des erreurs */
|
|
||||||
#include <errno.h>
|
|
||||||
/* fonctions de tsock*/
|
|
||||||
#include "tsock.h"
|
|
||||||
/* pour afficher l'adresse d'un socket */
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
Programme Principal
|
|
||||||
**********************************************************************/
|
|
||||||
|
|
||||||
void main (int argc, char **argv)
|
|
||||||
{
|
|
||||||
|
|
||||||
//Déclarations
|
|
||||||
|
|
||||||
int c;
|
|
||||||
extern char *optarg;
|
|
||||||
extern int optind;
|
|
||||||
int nb_message = -1; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */
|
|
||||||
int source = -1 ; /* 0=puits, 1=source */
|
|
||||||
int tcp=1; //tcp=1 => tcp ; tcp=0 =>udp
|
|
||||||
struct hostent *hp;
|
|
||||||
|
|
||||||
int port = -1; //Numéro de port
|
|
||||||
port =htons(port);
|
|
||||||
|
|
||||||
char *dest ;
|
|
||||||
int lg =30;
|
|
||||||
|
|
||||||
while ((c = getopt(argc, argv, "pn:sul:")) != -1)
|
|
||||||
{
|
|
||||||
|
|
||||||
switch (c)
|
|
||||||
{
|
|
||||||
case 'p':
|
|
||||||
if (source == 1)
|
|
||||||
{
|
|
||||||
printf("usage: cmd [-p|-s][-n ##]\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
source = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 's':
|
|
||||||
if (source == 0)
|
|
||||||
{
|
|
||||||
printf("usage: cmd [-p|-s][-n ##]\n");
|
|
||||||
exit(1) ;
|
|
||||||
}
|
|
||||||
dest=argv[argc-2];
|
|
||||||
source = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'n':
|
|
||||||
nb_message = atoi(optarg);
|
|
||||||
if (nb_message>100000)
|
|
||||||
{
|
|
||||||
printf("Trop d'envois, n> 100 000\n");
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'u':
|
|
||||||
tcp=0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'l':
|
|
||||||
lg = atoi(optarg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
printf("usage: cmd [-p|-s][-n ##]\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((port=atoi(argv[argc-1]))!=-1)
|
|
||||||
{
|
|
||||||
port=htons(port);
|
|
||||||
}
|
|
||||||
dest=argv[argc-2];
|
|
||||||
|
|
||||||
if (source == -1)
|
|
||||||
{
|
|
||||||
printf("usage: cmd [-p|-s][-n ##]\n");
|
|
||||||
exit(1) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (source == 1)
|
|
||||||
printf("SOURCE : ");
|
|
||||||
else
|
|
||||||
printf("PUITS : ");
|
|
||||||
|
|
||||||
|
|
||||||
if (tcp==1)
|
|
||||||
printf("Protocole de transport : TCP | ");
|
|
||||||
|
|
||||||
else
|
|
||||||
printf("Protocole de transport : UDP | ");
|
|
||||||
|
|
||||||
if (nb_message == -1)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (source == 1)
|
|
||||||
{
|
|
||||||
nb_message = 10;
|
|
||||||
printf("Nombre d'envois : %d | ", nb_message);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
printf("Nombre de receptions : infini | ");
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (source == 1)
|
|
||||||
{
|
|
||||||
|
|
||||||
printf("Nombre d'envois = %d | ", nb_message);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf("nb de tampons à recevoir = %d | ",nb_message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("Destinataire : %s\n", dest);
|
|
||||||
|
|
||||||
|
|
||||||
//Envoi de message, Source en UDP
|
|
||||||
|
|
||||||
int length_addr_dist;
|
|
||||||
length_addr_dist=sizeof(struct sockaddr_in);
|
|
||||||
|
|
||||||
|
|
||||||
if(source==1 & tcp==0)
|
|
||||||
{
|
|
||||||
envoi_UDP(port,nb_message,lg,dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
//PUITS de réception en UDP
|
|
||||||
|
|
||||||
else if (source==0 & tcp==0)
|
|
||||||
{
|
|
||||||
reception_UDP(port,nb_message,lg);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
else if (source==0 & tcp==1)
|
|
||||||
{
|
|
||||||
|
|
||||||
ServeurTCP(port, nb_message, lg);
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (source==1 & tcp==1)
|
|
||||||
{
|
|
||||||
|
|
||||||
ClientTCP(port,nb_message,lg,dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
258
tsock_vf.c
Normal file
258
tsock_vf.c
Normal file
|
@ -0,0 +1,258 @@
|
||||||
|
//--------------------------PROG C ET RESEAUX-----------------------
|
||||||
|
// Nom : Quintana
|
||||||
|
// Prénom : Béranger
|
||||||
|
// Grp : 3AE E
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
/* librairie standard ... */
|
||||||
|
#include <stdlib.h>
|
||||||
|
/* pour getopt */
|
||||||
|
#include <unistd.h>
|
||||||
|
/* déclaration des types de base */
|
||||||
|
#include <sys/types.h>
|
||||||
|
/* constantes relatives aux domaines, types et protocoles */
|
||||||
|
#include <sys/socket.h>
|
||||||
|
/* constantes et structures propres au domaine UNIX */
|
||||||
|
#include <sys/un.h>
|
||||||
|
/* constantes et structures propres au domaine INTERNET */
|
||||||
|
#include <netinet/in.h>
|
||||||
|
/* structures retournées par les fonctions de gestion de la base de
|
||||||
|
données du réseau */
|
||||||
|
#include <netdb.h>
|
||||||
|
/* pour les entrées/sorties */
|
||||||
|
#include <stdio.h>
|
||||||
|
/* pour la gestion des erreurs */
|
||||||
|
#include <errno.h>
|
||||||
|
/* fonctions de tsock*/
|
||||||
|
#include "tsock.h"
|
||||||
|
/* fonctions de BAL */
|
||||||
|
#include "bal.h"
|
||||||
|
/* pour afficher l'adresse d'un socket */
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Programme Principal
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
|
void main (int argc, char **argv)
|
||||||
|
{
|
||||||
|
|
||||||
|
//Déclarations
|
||||||
|
|
||||||
|
int c;
|
||||||
|
extern char *optarg;
|
||||||
|
extern int optind;
|
||||||
|
int nb_message = -1; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */
|
||||||
|
int source = -1 ; /* 0=puits, 1=source */
|
||||||
|
int tcp=1; //tcp=1 => tcp ; tcp=0 =>udp
|
||||||
|
struct hostent *hp;
|
||||||
|
int bal=-1;
|
||||||
|
int port = -1; //Numéro de port
|
||||||
|
int recep=-1;
|
||||||
|
port =htons(port);
|
||||||
|
int nb_lettres=3;
|
||||||
|
int nBAL=-1;
|
||||||
|
char *dest ;
|
||||||
|
int lg =30;
|
||||||
|
|
||||||
|
while ((c = getopt(argc, argv, "pn:sul:be:r:")) != -1)
|
||||||
|
{
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case 'p':
|
||||||
|
if (source == 1)
|
||||||
|
{
|
||||||
|
printf("ATTENTION :\n On ne peut être source et puits en même temps, Veuillez enlever une des deux options -s ou -p\n\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
source = 0;
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
if (source == 0)
|
||||||
|
{
|
||||||
|
printf("ATTENTION :\n On ne peut être source et puits en même temps, Veuillez enlever une des deux options -s ou -p\n\n");
|
||||||
|
exit(1) ;
|
||||||
|
}
|
||||||
|
dest=argv[argc-2];
|
||||||
|
source = 1;
|
||||||
|
break;
|
||||||
|
case 'b' :
|
||||||
|
if (source!=-1)
|
||||||
|
{
|
||||||
|
printf("ATTENTION :\nOn ne peut utiliser le service de Boite aux lettres et l'usage classique de TCP|UDP en même temps.\nVeuillez retirer une des options -b ou -s|-p\n\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
bal=1;
|
||||||
|
break;
|
||||||
|
case 'e' :
|
||||||
|
if (source!=-1)
|
||||||
|
{
|
||||||
|
printf("ATTENTION :\nOn ne peut utiliser le service de Boite aux lettres et l'usage classique de TCP|UDP en même temps.\nVeuillez retirer une des options -e ou -s|-p\n\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
if (recep==1)
|
||||||
|
{
|
||||||
|
printf("On ne peut pas être émetteur et récepteur, -r ou -e, pas les deux\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
bal=1;
|
||||||
|
recep=0;
|
||||||
|
nBAL = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 'r' :
|
||||||
|
if (recep==0)
|
||||||
|
{
|
||||||
|
printf("On ne peut être émetteur et récepteur en même temps : -e ou -r mais pas les deux\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
bal=1;
|
||||||
|
recep=1;
|
||||||
|
nBAL = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 'n':
|
||||||
|
nb_message = atoi(optarg);
|
||||||
|
if (nb_message>100000)
|
||||||
|
{
|
||||||
|
printf("Trop d'envois, n> 100 000\n");
|
||||||
|
exit (1);
|
||||||
|
}
|
||||||
|
if (recep==1)
|
||||||
|
{
|
||||||
|
printf("ATTENTION :\nVous devez récupérer l'intégralité du contenu de la BAL. Vous ne pouvez donc pas fixer n\n\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'u':
|
||||||
|
tcp=0;
|
||||||
|
if (bal!=-1)
|
||||||
|
{
|
||||||
|
printf("ATTENTION : \nL'envoi sur BAL ne se fait que via TCP, Veuillez enlever l'option -u\n\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'l':
|
||||||
|
lg = atoi(optarg);
|
||||||
|
if (lg>maxsize)
|
||||||
|
{
|
||||||
|
printf("Taille des messages supérieure à la limite fixée à %d\n",maxsize);
|
||||||
|
}
|
||||||
|
if (recep==1)
|
||||||
|
{
|
||||||
|
printf("ATTENTION :\nVous devez récupérer l'intégralité du contenu de la BAL. Vous ne pouvez donc pas fixer l\n\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("usage: ./tsock [-p|-s] ou [-b|-e|-r] [-n ##]\n");
|
||||||
|
exit(1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ((port=atoi(argv[argc-1]))!=-1)
|
||||||
|
{
|
||||||
|
port=htons(port);
|
||||||
|
}
|
||||||
|
|
||||||
|
dest=argv[argc-2];
|
||||||
|
|
||||||
|
if (source == -1 & bal ==-1)
|
||||||
|
{
|
||||||
|
printf("usage: ./tsock [-p|-s] ou [-b|-e|-r] + [-n ##]\n");
|
||||||
|
exit(1) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Service Partie 1 Sans BAL
|
||||||
|
if (bal == -1)
|
||||||
|
{
|
||||||
|
if (source == 1)
|
||||||
|
printf("SOURCE : ");
|
||||||
|
else
|
||||||
|
printf("PUITS : ");
|
||||||
|
|
||||||
|
|
||||||
|
if (tcp==1)
|
||||||
|
printf("Protocole de transport : TCP | ");
|
||||||
|
|
||||||
|
else
|
||||||
|
printf("Protocole de transport : UDP | ");
|
||||||
|
|
||||||
|
if (nb_message == -1) //Attribution du nombre de message à envoyer/recevoir si absence de -n XX
|
||||||
|
{
|
||||||
|
if (source == 1)
|
||||||
|
{
|
||||||
|
nb_message = 10;
|
||||||
|
printf("Nombre d'envois : %d | ", nb_message);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf("Nombre de receptions : infini | ");
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (source == 1)
|
||||||
|
printf("Nombre d'envois = %d | ", nb_message);
|
||||||
|
else
|
||||||
|
printf("nb de tampons à recevoir = %d | ",nb_message);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Destinataire : %s\n", dest);
|
||||||
|
|
||||||
|
|
||||||
|
//Envoi de message, Source en UDP
|
||||||
|
|
||||||
|
if(source==1 & tcp==0)
|
||||||
|
envoi_UDP(port,nb_message,lg,dest);
|
||||||
|
|
||||||
|
|
||||||
|
//PUITS de réception en UDP
|
||||||
|
else if (source==0 & tcp==0)
|
||||||
|
reception_UDP(port,nb_message,lg);
|
||||||
|
|
||||||
|
//Envoi de message en TCP
|
||||||
|
else if (source==0 & tcp==1)
|
||||||
|
ServeurTCP(port, nb_message, lg);
|
||||||
|
|
||||||
|
else if (source==1 & tcp==1)
|
||||||
|
ClientTCP(port,nb_message,lg,dest);
|
||||||
|
}
|
||||||
|
else //Partie 2 : UDP,TCP+BAL
|
||||||
|
{
|
||||||
|
if (nb_message == -1) //Attribution du nombre de message à envoyer/recevoir si absence de -n XX
|
||||||
|
{
|
||||||
|
if (recep == 0)
|
||||||
|
nb_message = 10;
|
||||||
|
|
||||||
|
}
|
||||||
|
if (bal==1 &recep==-1)
|
||||||
|
{
|
||||||
|
printf("____________________________________________________________________\n\n");
|
||||||
|
printf(" SERVEUR BAL \n");
|
||||||
|
printf("____________________________________________________________________\n\n");
|
||||||
|
SBAL(port, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (bal==1 & recep ==0)
|
||||||
|
{
|
||||||
|
printf("____________________________________________________________________\n\n");
|
||||||
|
printf(" EMETTEUR BAL \n");
|
||||||
|
printf("____________________________________________________________________\n\n");
|
||||||
|
EBAL(port, dest,nb_message,lg, nBAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(bal==1 &recep == 1)
|
||||||
|
{
|
||||||
|
printf("____________________________________________________________________\n\n");
|
||||||
|
printf(" RECEPTEUR BAL \n");
|
||||||
|
printf("____________________________________________________________________\n\n");
|
||||||
|
RBAL(port,dest,nBAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue