Yoshitu | Bonjour a tous,
J'ai créer un client et un serveur pour découvrir la librairie winsock2.
Voici les codes :
Client :
Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include <winsock2.h>
- #include <string.h>
- int main(int argc, char *argv[])
- {
- int continuer=1,port=0;
- char commande[102]={0},recu[10002],adresse[17]={0};
- printf("Bienvenue !\n\nPort : " );
- scanf("%ld",&port);
- printf("Adresse ip : " );
- scanf("%s",adresse);
- printf("\nCoordonnees : %s:%ld\n\n",adresse,port);
- printf("-Initialisation : " );
-
- WSADATA wsa;
- WSAStartup(MAKEWORD(2,0), &wsa);
-
- printf("OK\n" );
- printf("-Creation du socket : " );
-
- SOCKET sock;
- SOCKADDR_IN struct_sock;
- struct_sock.sin_addr.s_addr=inet_addr(adresse);
- struct_sock.sin_family=AF_INET;
- struct_sock.sin_port=htons(port);
- sock=socket(AF_INET,SOCK_STREAM,0);
- bind(sock,(SOCKADDR *)&struct_sock, sizeof(struct_sock));
-
- printf("OK\n" );
- printf("-Connexion au serveur : " );
-
- connect(sock, (SOCKADDR *)&struct_sock, sizeof(struct_sock));
-
- printf("OK\n\n\n" );
-
- while(continuer==1){
- printf("Commande : " );
- scanf("%s",commande);
- strcat(commande,"\r\n" );
- send(sock, commande, strlen(commande), 0);
- recv(sock, recu, sizeof(recu), 0);
- printf("Serveur a repondu : \"%s\"\n",recu);
-
- }
- closesocket(sock);
- WSACleanup();
- getchar();
- return 0;
- }
|
Serveur :
Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include <winsock2.h>
- #include <string.h>
- int main(int argc, char *argv[])
- {
- int taille=0;
- char phrase[]="Bienvenu, ca marche :) \r\n",recu[1000]={0};
-
- printf("Connexion : " );
-
- WSADATA wsa;
- WSAStartup(MAKEWORD(2,0), &wsa);
-
- SOCKET sock,sockexe;
- SOCKADDR_IN struct_sock,struct_sockexe; //les new var qui finissent par exe concerne le client.
- sock=socket(AF_INET, SOCK_STREAM, 0);
- struct_sock.sin_addr.s_addr=INADDR_ANY;
- struct_sock.sin_family=AF_INET;
- struct_sock.sin_port=htons(3768);
- bind(sock,(SOCKADDR *)&struct_sock, sizeof(struct_sock));
-
- listen(sock, 0);
-
- printf("OK\n" );
-
- while(1){
- taille=sizeof(struct_sockexe);//On met la taille de la structure dans une variable qu'on transmetra a la fonction.
- sockexe=accept(sock,(SOCKADDR *)&struct_sockexe, &taille);
- if(sockexe!=INVALID_SOCKET){
- send(sockexe,phrase,strlen(phrase),0);
- recv(sock, recu, sizeof(recu), 0);
- printf("%s",recu);
- }
- }
-
- closesocket(sock);
- WSACleanup();
- getchar();
- return 0;
- }
|
Je démarre le serveur, puis le client. Une fois le client connecté, il recoit un p'tit message de la part du serv, mais le problème c'est que en principe si j'appuie sur entrée une 2eme fois (sur le client bien sur) , mon serveur refuse de renvoyer le message de bienvenu.
Pour ceux qui ne comprendrait pas, je vous donne le lien de mes 2 programmes : http://antibatch.free.fr/client+serv.rar
il suffit d'executer d'abord serveur, puis client où il faudra remplir port par 3768 et adresse ip par 127.0.0.1 .
merci de m'aider
+ |