J'ai réussi a faire ca, c'est la partie serveur. Mais ca ne compile pas..
Je vous met le code
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <fcntl.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define MAX_SIZE 256
#define PORT 44412
int main(int argc, char *argv[])
{
struct hostent *hp = NULL;
struct sockaddr_in serv_ad, client_ad;
int sin_size,retour;
unsigned long addr;
int sockd, sockcli;
int valide;
if (argc != 2)
{
printf("Probleme d'arguments\n");
exit (1);
}
hp = argv[1] ;
//open the socket
if ((sockd=socket(AF_INET, SOCK_DGRAM, 0))==-1)
{
printf(" error open socket\n");
return -1;
}
if (setsockopt(sockd, SOL_SOCKET, SO_REUSEADDR, &valide, sizeof(int))==-1)
{
printf(" error set socket options\n");
return -1;
}
//configuration de serv_ad
serv_ad.sin_family=AF_INET;
serv_ad.sin_port=htons(PORT);
serv_ad.sin_addr.s_addr=hp->h_addr;
serv_ad.sin_zero[8]=0;
sin_size= hp->h_length;
if(bind(sockd, (struct sockaddr*)&serv_ad,sin_size)==-1)
{
printf(" error bind\n");
return -1;
}
if (connect(sockd,(struct sockaddr*)&serv_ad,sin_size)==1)
{
printf(" error connect\n");
return -1;
}
if (send(sockd,(char*)&serv_ad,sizeof(serv_ad),0)==-1)
{
printf(" error send\n");
return -1;
}
while(1)
{
// lancement de l'attente de connexion client
if (listen(sockd,5)==-1)
{
printf(" error listen\n");
return -1;
}
if (accept(sockd,(struct sockaddr*)&serv_ad,&sin_size)==-1)
{
printf(" error accept\n");
return -1;
}
// dialogue avec le client
retour = recv(socket,(char*)&serv_ad,sizeof(serv_ad),0 );
if (retour == -1)
{
printf(" error recv\n");
return -1;
}
retour = send(socket,(char*)&serv_ad,sizeof(serv_ad),0 );
if (retour == -1)
{
printf(" error send\n");
return -1;
}
// fermeture socket client
shutdown(sockcli,1);
exit(0);
}
close(sockcli);
return 0;
}
Je vais essayer de m'attaquer a la partie client.
Merci a vous