#include "tcp_serveur.h"
char buffer_reception[LG_BUFFER];
char buffer_emission[LG_BUFFER];
//____________________________________________________________________________________________
//
// FONCTION serveur_tcp
//____________________________________________________________________________________________
int serveur_tcp (const char * hote_serveur, int port_serveur)
{
int socket_gestion_connexions;
int socket_connectee;
struct sockaddr_in adresse;
socklen_t longueur;
socket_gestion_connexions = cree_socket_stream (hote_serveur, port_serveur);
if (socket_gestion_connexions < 0)
return (-1);
listen (socket_gestion_connexions, 5);
while (! quitter_le_serveur ()) {
longueur = sizeof (struct sockaddr_in);
socket_connectee = accept (socket_gestion_connexions, & adresse, & longueur);
if (socket_connectee < 0) {
perror ("accept" );
return (-1);
}
switch (fork ()) {
case 0 : // fils
close (socket_gestion_connexions);
traite_connexion (socket_connectee);
exit (0);
case -1 :
perror ("fork" );
return (-1);
default : // père
close (socket_connectee);
}
}
return (0);
}
//____________________________________________________________________________________________
//
// FONCTION creer_socket_stream
//____________________________________________________________________________________________
int cree_socket_stream (const char * hote_serveur, int port_serveur)
{
int sock;
struct sockaddr_in adresse_serveur;
if ((sock = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
perror ("socket" );
return (-1);
}
memset (&adresse_serveur, 0, sizeof (struct sockaddr_in));
adresse_serveur.sin_family = AF_INET;
adresse_serveur.sin_port = htons (port_serveur);
inet_aton (hote_serveur, & (adresse_serveur.sin_addr));
if (bind (sock, (struct sockaddr *) & adresse_serveur, sizeof (struct sockaddr_in)) < 0) {
close (sock);
perror ("bindTCP" );
return (-1);
}
return (sock);
}
//____________________________________________________________________________________________
//
// FONCTION quitter_le_serveur
//____________________________________________________________________________________________
int quitter_le_serveur (void)
{
return (0);
}
//____________________________________________________________________________________________
//
// FONCTION traite_connexion
//____________________________________________________________________________________________
void traite_connexion (int socket_connectee)
{
int recu;
int taille_paquets;
int debit_paquets;
int duree_envoi_paquets;
while (1)
{
lecture_requete_client_tcp( socket_connectee, &taille_paquets, &debit_paquets,
&duree_envoi_paquets);
reponse_requete_client_tcp( socket_connectee, taille_paquets, debit_paquets,
duree_envoi_paquets);
envoi_paquet_fin_tcp(socket_connectee);
}
close (socket_connectee);
}
_______________________________________________________
#include "tcp_client.h"
char buffer_reception[LG_BUFFER];
char buffer_emission[LG_BUFFER];
int client_tcp(const char * hote_serveur, int port_serveur)
{
int socket_client;
struct sockaddr_in adresse_serveur;
int nb_paquets_recus;
// Identification de la socket du serveur
memset (&adresse_serveur, 0, sizeof (struct sockaddr_in));
adresse_serveur.sin_family = AF_INET;
adresse_serveur.sin_port = htons (port_serveur);
inet_aton (hote_serveur, & (adresse_serveur.sin_addr));
if ((socket_client = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
perror ("socket" );
exit (1);
}
if (connect (socket_client, (struct sockaddr *) & adresse_serveur, sizeof (struct sockaddr_in)) < 0)
{
perror ("connect" );
exit (1);
}
while (1)
{
envoi_requete_serveur_tcp(socket_client);
nb_paquets_recus=0;
do
{
}while(lecture_reponse_serveur_tcp(socket_client, &nb_paquets_recus)!=1);
}
return (0);
}