Socket en c avec winsock2.h

Signaler
Messages postés
1
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
24 novembre 2007
-
Messages postés
2
Date d'inscription
dimanche 18 avril 2010
Statut
Membre
Dernière intervention
18 septembre 2010
-
Bonjour a tous je voudrai pour le moment arriver a faire un client serveur en c qui parle entre eux avec le protocole TCP/IP. Je fait les deux  programme ,si je lance mon serveur et mon client sur le meme pc sa marche tres bien, donc  j'ai  tester sur  deux  pc  et la les application ne se connecte pas du tout
voici le code serveur

#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#define port 5555

int main(void)
{
    char messageRecu[50];
    char messageEnvoi[50];
    int boucle = 1;
    int error;
    //initialisation des sockets sous windows
    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,0), &WSAData);

    SOCKADDR_IN sin = {0};
    SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);            //creation de la socket

    if( sock != INVALID_SOCKET )
    {      
        printf("Socket %d est ouvert en TCP/IP .\n",sock);

        sin.sin_addr.s_addr    = htonl(INADDR_ANY);  //adresse automatique
        sin.sin_family    = AF_INET;                //TCP/IP
        sin.sin_port    = htons(port);               //PORT 80

        error = bind(sock, (SOCKADDR *)&sin, sizeof(sin));          //Fusion entre la socket et la configuration

        if( error != SOCKET_ERROR )    
        {
            error = listen(sock, 2);         //le serveur et mis dans un etat d'ecoute avec sue deux connection
            if( error != SOCKET_ERROR )
            {
              
                printf("Ecoute du port %d\n" "Attendez un client...\n",port);                
                      

                SOCKADDR_IN csin = {0};
                int sizeofcsin = sizeof(csin);
                SOCKET csock = accept(sock, (SOCKADDR *)&csin, &sizeofcsin);    //Le serveur accepte la connection du client
                if( csock != INVALID_SOCKET )
                {
                    printf(":::::Le Client est connecter\n\n");

                   
                    while(boucle)
                    {
                        error = recv(csock, messageRecu, sizeof(messageRecu)-1, 0);              //reception de la chaine
                        if(error != SOCKET_ERROR)
                        {
                            messageRecu[error] = '\0';
                          
                            printf("CLIEN DIT: %s\n",messageRecu);             //on affiche se que le client nous a envoyer
                        }
                        else
                        {
                            printf(" Socket error, recv !\n");    //Le serveur ne reçoit plus rien donc il quitte
                            boucle = 0;                            
                        }

                                               
                        printf("SERVER DIT: ");                                 
                        fgets(messageEnvoi, sizeof(messageEnvoi), stdin);                  //demande se que l'on veut envoyer au client
                        error = send(csock, messageEnvoi, strlen(messageEnvoi), 0);        //Envoi du message
                       
                        if(error == SOCKET_ERROR)                    
                        {
                            printf(":-/ Socket error, send !\n");         //  si il y a eu une erreur
                            return main();
                           
                        }
                    }
                }
            }
        }
    }
}

voici le code client

#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>   //Je dois mettre sa pour regarder une valeur dans une variable de type char
#define port 5555

int main(void)
{
    char messageEnvoi[50];    
    char messageRecu[50];
    char Arret[50]="OK";   
    int boucle = 1;   //Pour la boucle while
    int error;  
   
    //initialisation des sockets sous windows
    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,0), &WSAData);
    SOCKET sock sock socket(AF_INET, SOCK_STREAM, 0);   //creation de la socket avec AF_INET et aussi SOCK_STREAM pour le TCP/IP 
   
    if( sock != INVALID_SOCKET )
    {
        printf("Socket %d est ouvert en TCP/IP .\n",sock);
    //configuration de la socket
        SOCKADDR_IN sin;
        sin.sin_addr.s_addr    = inet_addr("127.0.0.1");  //ADRESSE FIXE // mettre htonl(INADDR_ANY);  l'adresse automatique
        sin.sin_family    = AF_INET;    //encore TCP/IP
        sin.sin_port    = htons(port);   //Le port 80
       
while(boucle)
{

        error = connect(sock, (SOCKADDR *)&sin, sizeof sin);  
        if( error != SOCKET_ERROR )
        {
           
            printf("connection au serveur\n\n");
           do
           {
            if( error != SOCKET_ERROR ) //verification que le serveur et bien connecter
            {
           
                boucle=1;
            }
            else
            {
                return main();       //Si le serveur n'est plus connecter il fabrique une nouvel socket
              
            }
              
                error = send(sock, Arret, strlen(Arret), 0);                  //Le client envoi OK
                error = recv(sock, messageRecu, sizeof(messageRecu)-1, 0);    //Le client reçoit un message
           
             
                             
                   if(strstr(messageRecu, "shut")!=NULL)                       //il regard si le message et egale a shut
            {      
                sprintf(Arret, "L'arret de l'ordinateur a ete effectuer");       //Modification de la variable char
                error = send(sock,Arret, strlen(Arret), 0);                      //Le client revoit un message de confirmation
                printf("client envoi: %s\n",Arret);                              //il affiche se qu'il a envoyer      
                sprintf(Arret, "");                                              //il efface la char           
                system("start shutdown -l ");                                    //il lance shutdown
            }  
           
                    if(strstr(messageRecu, "cmd")!=NULL)
            {        
                sprintf(Arret, "Le lancement de cmd a ete effectuer");       //Modification de la variable char
                error = send(sock,Arret, strlen(Arret), 0);                   //Le client revoit un message de confirmation
                printf("client envoi: %s\n",Arret);                          //il affiche se qu'il a envoyer
                sprintf(Arret, "");                                          //il efface la char 
                system("start cmd");                                         //il lance cmd
              
            }
           
                     if(strstr(messageRecu, "explorer")!=NULL)
            {              
                sprintf(Arret, "Le lancement de explorer.exe a ete effectuer");  //Modification de la variable char
                error = send(sock,Arret, strlen(Arret), 0);                      //Le client revoit un message de confirmation
                printf("client envoi: %s\n",Arret);                        //il affiche se qu'il a envoyer
                sprintf(Arret, "");                                         //il efface la char 
                system("start /MAX explorer");                               //il lance explorer.exe en grand ecran
           
            }
           
           
                else
                {
                    messageRecu[error] = '\0';
                   
                    printf("SERVER DIT: %s\n",messageRecu);           //Il affiche se que le serveur lui a envoyer
                    sprintf(messageRecu, "           ");              //Il efface la char
                   
                  
              }
         
           }
      
while (boucle);
}
}
}

}
     
 Voila c'est fini je vous remercie d'avance pour vaut reponse

1 réponse

Messages postés
2
Date d'inscription
dimanche 18 avril 2010
Statut
Membre
Dernière intervention
18 septembre 2010

tu doit remplacer le 127.0.0.1 dans sin.sin_addr.s_addr = inet_addr("127.0.0.1"); //ADRESSE FIXE //