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;
}
////////FIN DU CODE///////
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;
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 tai
lle 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;
}
////////FIN DU CODE///////
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
+