Bonjour,
Je suis en DUT informatique et je dois faire un petit chat en C sous UNIX (et un jeu en réseau également)
Je suis complètement perdu, on a pas encore vu les sockets.
Est-ce que vous pourriez m'aider ?
Merci de votre réponse
#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;
}
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define TAILLEMAX 256
#define PORT 44412
/* programme client */
main(int argc, char *argv[])
{
int sd,lon,valide,retour;
struct sockaddr_in adsock;
struct hostent *hptr ; /* infos recuperes sur le host */
char buf[TAILLEMAX] ; /*buffer de lecture des infos */
char *host ; /*pointeur sur le nom du host distant */
char *mesg ;
if (argc != 2)
{
printf("Probleme d'arguments\n");
exit (1);
}
host = argv[1] ;
lon=sizeof (hp->h_addr);
adsock.sin_family=AF_INET;
adsock.sin_port=htons(PORT);
memset (&adsock.sin_zero[8], 0, 1);
memcpy (&adsock.sin_addr.s_addr, &hp->h_addr, lon);
if ((sd=socket(AF_INET, SOCK_DGRAM, 0))==-1)
{
printf(" error open socket\n");
return -1;
}
if (setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &valide, sizeof(int))==-1)
{
printf(" error set socket options\n");
return -1;
}
if (connect(sd,(struct sockaddr*)&adsock,lon)==1)
{
printf(" error connect\n");
return -1;
}
retour = send(sd,(char*)&adsock,sizeof(adsock),0 );
if (retour == -1)
{
printf(" error send\n");
return -1;
}
retour = recv(sd,(char*)&adsock,sizeof(adsock),0 );
if (retour == -1)
{
printf(" error recv\n");
return -1;
}
shutdown(sd);
close(sd) ;
exit(0) ;
}
Combien cela coûte-t-il au total ? Quelles aides apportent l'état et les acteurs du marché pour alléger cette charge non choisie ? Tous les détails sur Commentçamarche.net.