Client/serveur tcp, le serveur envoie au client son heure ou sa date [visual c++]

Contenu du snippet

Ce code est un client/serveur TCP sous windows, le client tape"heure" pour connaitre l'heure du serveur ou "date" pour connaitre la date. Sur le serveur on peut selectionner le n° de port qui servira de serveur, et sur le client on configure l'adresse ip du serveur et le n°de port.
biensur cela n'a pas grand interet, mais c'est juste pour montrer comment effectuer des communication client/serveur.Vous pouvez l'utiliser pour tout autre chose il suffit de modifier les codes se trouvant dans les fonction traitement().

Source / Exemple :


/*************************************************************
			LE SERVEUR

                                                                                                                            • /
#include <stdio.h> #include <winsock2.h> #include <string.h> #include <time.h> #pragma comment(lib, "ws2_32.lib") #define LG_MAX_REQUETE 1024 void traitement(SOCKET); void main() { int val,port=0,erreur; WSADATA wsa; /* initialisation */ WSAStartup(MAKEWORD(2,0), &wsa); SOCKET serveur; SOCKET client; SOCKADDR_IN sin; SOCKADDR_IN clientsin; /* saisir la configuration du serveur */ printf("Entrez le numero de port: "); scanf("%d",&port); /* creation de la socket serveur */ serveur=socket(AF_INET,SOCK_STREAM,0); if(serveur==INVALID_SOCKET) { perror("erreur de creation de la socket"); exit(-1); } /* configuration de la socket */ sin.sin_addr.s_addr = INADDR_ANY; sin.sin_family = AF_INET; sin.sin_port = htons(port); /* attacher le socket au n° de port*/ erreur=bind(serveur,(SOCKADDR *)&sin, sizeof(sin)); if(erreur == INVALID_SOCKET) { perror("bind"); exit(-1); } /* creation d'une file d'attente de demande de connexion */ listen(serveur,0); val=sizeof(clientsin); printf("\n\tServeur en route\n"); while(1) { /* accepter une connexion */ client=accept(serveur,(SOCKADDR *)&clientsin,&val); if(client == INVALID_SOCKET) { perror("erreur de connection"); exit(-1); } /* fonction qui utilise la socket */ traitement(client); } } /************************************************************** traitement traite la requete envoyer par le client
                                                                                                                            • /
void traitement(SOCKET client) { int lg,comparaison; char reponse[LG_MAX_REQUETE],date[10],heure[10]; /* attendre la reception d'une requete sur la socket "client" */ lg=recv(client,reponse,LG_MAX_REQUETE,0); reponse[lg]='\0'; comparaison=strcmp(reponse,"date"); if(comparaison==0) { _strdate(date); sprintf(reponse, "Date du serveur: %s\n",date); } comparaison=strcmp(reponse,"heure"); if(comparaison==0) { _strtime(heure); sprintf(reponse, "Heure du serveur: %s\n",heure); } lg=strlen(reponse); /* envoyer une requete sur la socket "client" */ send(client,reponse,lg,0); } /************************************************************** LE CLIENT
                                                                                                                            • /
#include <stdio.h> #include <string.h> #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") #define LG_MAX_REQUETE 1024 void traitement(SOCKET); void main() { int port=0,erreur; struct hostent *nom_serveur; char ad_serveur[255]; WSADATA wsa; /* initialisation */ WSAStartup(MAKEWORD(2,0), &wsa); SOCKET client; SOCKADDR_IN sin; /* saisir la configuration du client */ printf("Entrez l'adresse du serveur :"); scanf("%s",ad_serveur); printf("Entrez le numero de port: "); scanf("%d",&port); nom_serveur=gethostbyname(ad_serveur); if(nom_serveur==NULL) { perror("adresse non valide"); exit(-1); } /* creation de la socket client */ client = socket(AF_INET,SOCK_STREAM,0); if(client==INVALID_SOCKET) { perror("erreur de creation de la socket"); exit(-1); } /* configuration de la socket */ memcpy(&sin.sin_addr,nom_serveur->h_addr,nom_serveur->h_length); sin.sin_family = AF_INET; sin.sin_port = htons(port); /* connecter le client au serveur */ erreur=connect(client, (SOCKADDR *)&sin, sizeof(sin)); if(erreur==INVALID_SOCKET) { perror("erreur de connexion"); exit(-1); } /* fonction qui utilise la socket */ traitement(client); /* fermer le socket */ closesocket(client); WSACleanup(); } /************************************************************************************ traitement taper heure pour avoir l'heure du serveur, ou date pour obtenir la date du serveur
                                                                                                                                                                          • /
void traitement(SOCKET client) { int lg; char requete[LG_MAX_REQUETE]; printf("ca marche?\n"); scanf("%s",requete); lg=strlen(requete); send(client,requete,lg,0); lg=recv(client,requete,LG_MAX_REQUETE,0); requete[lg]='\0'; printf("%s",requete); system("PAUSE"); }

Conclusion :


Ce prog marche sous visual c++ 6, mais pas sous borland c++ 5.02. Pour les autre compilateur je ne sais pas.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.