begin process at 2012 05 30 17:18:17
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Réseau & Internet

 > 

Socket en c avec winsock2.h


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Socket en c avec winsock2.h

samedi 24 novembre 2007 à 00:07:50 | Socket en c avec winsock2.h

juju11288

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




lundi 9 août 2010 à 15:05:50 | Re : Socket en c avec winsock2.h

hamma58

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


Cette discussion est classée dans : arret, socket, error, sin, sock


Répondre à ce message

Sujets en rapport avec ce message

Connexion SOCKET_ERROR [ par fredsor ] Salut a tous,Je réalise un ptit programme au sein duquel je me connecte a un serveur distant, afin de récupérer via une methode GET des informations n socket trop lents [ par cid7777777 ] bonjour,jessaye de faire un jeu qui peu se jouera 2 en reseau local.je ne connais absolument rien en reso, mais en fouillant sur le net,  jai trouver Probleme Winsock [ par fredsor ] Salut a vous, Je suis toujours en train de passer une appli de embedded visual c++ (donc pour Windows CE => Pocket Pc) vers DevC++ (windows "normal", WSAAsyncSelect [ par lektrosonic ] Bonsoir,Je code un serveur, voici la partir du code relative aux sockets:---------------------------------------------------------------if(WSAStartup( RECV() TELNET [ par kiki67100 ] Bonjour j'ai fait un serveur en c++ Mais le probleme c'est que mon code lit le recv() de telnet caractere par caractere et moi je voudrais phrase par fonction accepte bloquante.. [ par ssmint ] Bonjour à tous,nouveau problème de socket, côté server cette fois ci :imaginons que plusieurs clients cherchent à se connecter sur le port d'écoute du winsock 2 listen [ par lektrosonic ] Bonjour, ceci est mon bou de code, je veu mette le socket en mode listen, mais de ke je le fait, ca plante...ce bout de code est sous win32 et la fene Probleme entre DLL et socket [ par XKaliBur ] Le probleme est que je réalise un hook sur mon clavier et que chaque frappe interceptée je veux l'envoyer via un socket à un serveur, mais des que j'e Problème d'IP Client avec les winsock [ par Cphil51 ] Boujour a tous.Je m'interesse en ce moment aux socket sous windows et j'ai un petit probleme actuellement. J'aimerais savoir comment récupérer l'IP d'


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales