Architecture client/serveur iteratif en mode TCP sous UNIX(UBUNTU)
/*cote client*/
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#define INVALID_SOCKET -1
#define SOCKET_ERROR -1
#define closesocket(s) close(s)
typedef int SOCKET;
typedef struct sockaddr_in SOCKADDR_IN;
typedef struct sockaddr SOCKADDR;
#include<stdio.h>
#include<stdlib.h>
#define PORT 5240
int main(void)
{
SOCKET sock;
SOCKADDR_IN sin;
char buffer[30]="";
char buffer1[30]="bonjour tout le monde";
int a;
sock=socket(AF_INET,SOCK_STREAM,0);
sin.sin_addr.s_addr=inet_addr("127.0.0.1");
sin.sin_family=AF_INET;
sin.sin_port=htons(PORT);
if (connect(sock,(SOCKADDR*)&sin , sizeof(sin)) !=SOCKET_ERROR)
{
printf("connexion a %s sur le port %d\n", inet_ntoa(sin.sin_addr),htons(sin.sin_port));
a=send(sock, buffer1, 30,0);
printf(" message envoye");
if (recv(sock,buffer, 30 ,0) !=SOCKET_ERROR)
printf("le message a ete recu :%s\n" , buffer);
}
else
{
printf("impossible de se connecter\n");
}
closesocket(sock);
getchar();
return EXIT_SUCCESS;
}
/*cote serveur*/
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define INVALID_SOCKET -1
#define SOCKET_ERROR -1
#define closesocket(s) close(s)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PORT 5240
typedef int SOCKET;
typedef struct sockaddr_in SOCKADDR_IN;
typedef struct sockaddr SOCKADDR;
int main(void)
{
SOCKET sock;
SOCKADDR_IN sin;
SOCKET csock;
SOCKADDR_IN csin;
char buffer[30]="Merci!";
char buffer2[30]="";
socklen_t recsize=sizeof(csin);
int sock_err;
sock=socket(AF_INET,SOCK_STREAM,0);
if (sock != INVALID_SOCKET)
{
printf("la socket %d est maintenant ouverte en mode connecte\n",sock);
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_family = AF_INET;
sin.sin_port = htons(PORT);
sock_err = bind(sock,(SOCKADDR*)&sin,sizeof(sin));
if (sock_err !=SOCKET_ERROR)
{
sock_err=listen(sock,5);
printf("listage du port %d...\n",PORT);
if (sock_err !=SOCKET_ERROR)
{
printf("veuillez patienter pendant que la connexion soit etablie");
csock=accept(sock,(SOCKADDR*)&csin,&recsize);
printf("le client se connecte avec la socket %d de %s :%d\n",csock, inet_ntoa(csin.sin_addr),htons(csin.sin_port));
if (recv(csock,buffer2,30,0) != SOCKET_ERROR)
{
sock_err = send(csock,buffer,30,0);
printf("le message est recu : %s\n",buffer2);
}
if (sock_err != SOCKET_ERROR)
printf("message envoyee : %s\n",buffer);
else
printf("erreur de transmissin\n");
shutdown(csock,2);
}
}
printf("fermeture de la socket...\n");
closesocket(sock_err);
printf("fermeture du serveur\n");
}
closesocket(sock);
getchar();
return EXIT_SUCCESS;
}