IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

SOCKET SUR LE NET


Sujet :

Réseau C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 3
    Par défaut SOCKET SUR LE NET
    Bonjour tous,
    s'il vous plait j'aimerais savoir comment faire fonctionner les sockets sur internet :
    je suis serveur, je lance le serveur (serveur) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            /* Initialisation de la structure adr_sock */
            memset(&adr_sock.sin_family,0,sizeof(adr_sock));
            adr_sock.sin_addr.s_addr = htonl(INADDR_ANY);
            adr_sock.sin_port = htons(PORT);
    ......
            /* Initialisation de la structure adr_sock */
            memset(&adr_sock.sin_family,0,sizeof(adr_sock));
            adr_sock.sin_addr.s_addr = htonl(INADDR_ANY);
            adr_sock.sin_port = htons(PORT);
    .....
    puis une machine cliente essaie de se connecter sur cette socket en spécifiant l'adresse IP et le numéro de port, mais lorsque je teste ça réellement, la machine cliente reste en attente puis il affiche une erreur "Problème avec la machine @IP"

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Tu nous as mis 2 fois le même code et en plus, il n'est pas complet, il manque la création du socket est les séquences qui suivent pour le serveur et le client.

    Autre chose, ton serveur ne serais pas derrière une box (à la maison) parce que si oui, il faut autoriser le serveur au niveau de la box. Au fait, il est où es ton client qui tente de se connecter (sur le même réseau que le serveur, sur internet ?)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 3
    Par défaut rectification
    Code client.c :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    /* Communication par socket : Programme Client */
    /* Fichier client.c */
     
    /**************************************************************************************/
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<sys/types.h>
    #include<sys/socket.h>
    #include<netinet/in.h>
    #include<netdb.h>
     
    #ifndef LONGUEUR_MAX
    #define LONGUEUR_MAX 256
    #endif
     
    int main(int argc,char* argv)
    {
            struct hostent *hp;
            struct sockaddr_in adr_serveur;
            char machine_serveur[LONGUEUR_MAX];
            char machine_cliente[LONGUEUR_MAX];
            char mess_emis[128];
            char mess_recu[128];
     
            int descript;
            int port;
            int i;
     
            /* Initialisation du nom de la machine locale */
            gethostname(machine_cliente,LONGUEUR_MAX);
            /* Obtention du nom du serveur */
            fprintf(stdout,"Entrez le nom de la machine serveur : ");
            fscanf(stdin,"%s",machine_serveur);
            fprintf(stdout,"Le client est sur %s, le serveur est sur %s\n",machine_cliente,machine_serveur);
     
            /* Obtention de l'adresse IP de la machine serveur */
            if((hp=gethostbyname(machine_serveur))==NULL)
            {
                    fprintf(stderr,"Erreur client : échec gethostbyname sur %s\n",machine_serveur);
                    exit(-1);
            }
     
            /* Obtention du numéro de port à utiliser */
            fprintf(stdout,"Quel est le numéro de port du serveur : ");
            fscanf(stdin,"%d",&port);
     
            /* Création de la socket */
            if((descript = socket(AF_INET,SOCK_STREAM,0))== -1)
            {
                    perror("Erreur client : probleme création socket");
                    exit(-1);
            }
            fprintf(stdout,"Client : Socket créée\n");
     
            /* Préparation de la structure sockaddr_in */
            memset(&adr_serveur,0,sizeof (struct sockaddr_in));
            adr_serveur.sin_family = AF_INET;
            adr_serveur.sin_port = htons(port);        
     
            /* Transfert de l'adresse IP du serveur donnée par gethostbyname vers la structure adr_serveur */
            memcpy(&adr_serveur.sin_addr.s_addr,hp->h_addr,hp->h_length); /* Autrement : adr_serveur.sin_addr.s_addr = ((struct in_addr*)(hp->h_addr))->s_addr;  ou  encore  
                                                                                            bcopy(hp->h_addr,&adr_serveur.sin_addr.s_addr,hp->h_length);*/
     
            /* Connexion sur le serveur */
            if(connect(descript,(struct sockaddr*)(&adr_serveur),sizeof(struct sockaddr_in)) == -1)
            {
                    fprintf(stderr,"Client : problème connexion avec %s\n",machine_serveur);
                    close(descript);
                    exit(-1);
            }
            fprintf(stdout,"Client : connexion réussie avec %s\n",machine_serveur);
     
            /* Envoi de 10 messages sur la socket et réception des réponses du serveur et d'un 11ème commençant par F pour signaler la fin des messages */
            for(i=1;i<=10;i++)
            {
                    /* On envoie un message sur la socket */
                    if(i==11)
                    {
                            mess_emis[0]='F';
                    }
                    else
                    {
                            sprintf(mess_emis,"%d Message(s) du client",i);
                    }
                    send(descript,mess_emis,sizeof(mess_emis),0);
                    fprintf(stdout,"Client : j'ai envoyé : %s\n",mess_emis);
                    sleep(1);
                    /* On attend une réponse sur la socket */
                    recv(descript,mess_recu,sizeof(mess_recu),0);
                    fprintf(stdout,"Client : j'ai reçu : %s\n",mess_recu);
            }
            fprintf(stdout,"Client : j'ai fini.\n");
            printf("\n\nCode socket : %d\n\n",descript);
            close(descript);
            return(0);
    }

    Code serveur.c :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    /***************************************************/
    /* Communication par socket : Programme du serveur */
    /***************************************************/
     
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<sys/types.h>
    #include<sys/socket.h>
    #include<netinet/in.h>
    #include<netdb.h>
    #include<unistd.h>
     
    /** Le port 0 permet d'allouer dynamiquement la socket */
    #define PORT 0
     
    #ifndef LONGUEUR_MAX
    #define LONGUEUR_MAX 256
    #endif
     
    int main(int argc,char* argv)
    {
            int descript;  /* Descripteur socket d'écoute */
            int descript_courant;  /* Descripteur socket de service */
            struct sockaddr_in adr_sock;  /* On pourrait aussi initialiser cette structure comme ceci : struct sockaddr_in adr_sock = (AF_INET,htons(PORT),htonl(INADDR_ANY)); */
            struct sockaddr_in adr_instance;
            char reponse[128];
            char mess_recu[128];
            char nom_serveur[LONGUEUR_MAX];
            int long_adr;
            int i;
     
            /* Initialisation nom du serveur */
            gethostname(nom_serveur,sizeof(nom_serveur));
     
            /* Création socket d'écoute */
            if((descript = socket(AF_INET,SOCK_STREAM,0)) == -1)
            {
                    perror("\tServeur : problème création socket");
                    exit(-1);
            }
     
            /* Initialisation de la structure adr_sock */
            memset(&adr_sock.sin_family,0,sizeof(adr_sock));
            adr_sock.sin_addr.s_addr = htonl(INADDR_ANY);
            adr_sock.sin_port = htons(PORT);
     
            /* Attachement de la socket : allocation d'un numéro de port */
            if(bind(descript,(struct sockaddr*)&adr_sock,sizeof(adr_sock)) == -1)
            {
                    perror("\tServeur : problème sur bind");
                    close(descript);
                    exit(-1);
            }
     
            /* Récupération du numéro de port alloué à la socket */
            long_adr = sizeof(adr_sock);
            getsockname(descript,&adr_sock,&long_adr);
            fprintf(stdout,"Le numéro de port alloué est : %d\n",ntohs(adr_sock.sin_port));
            fprintf(stdout,"\n\tServeur : en attente de connexion...\n");
     
            /* Nombre de connexions simultanées limité à 5 */
            if(listen(descript,5) == -1)
            {
                    perror("\tServeur : erreur sur listen");
                    close(descript);
                    exit(-1);
            }
     
            /* Accepte une requête : On récupère dans adr_instance le numéro de port et l'adresse IP du client qui s'est connecté */
            if((descript_courant=accept(descript,(struct sockaddr*)(&adr_instance),&long_adr))==-1)
            {
                    perror("\tServeur : erreur sur accept");
                    close(descript);
                    exit(-1);
            }
            printf("\tServeur : connexion acceptée...\n");
     
            i=1;
            do
            {
                    recv(descript_courant,mess_recu,sizeof(mess_recu),0);
                    fprintf(stdout,"\tServeur : j'ai reçu du client : (%d) %s\n",i,mess_recu);
                    sprintf(reponse,"Réponse numéro %d\0",i++);
                    send(descript_courant,reponse,sizeof(reponse),0);
                    fprintf(stdout,"\tServeur : j'ai envoyé au client : %s\n",reponse);
            }
            while(mess_recu[0]!='F');
     
            fprintf(stdout,"Serveur : j'ai fini\n");
     
            /* Fermer les sockets */
            close(descript_courant);
            close(descript);
     
            return(0);         
    }

    Séquences :
    J'ai testé avec un collègue, je lance ./serveur
    le collègue lance ./client et il donne l'adresse IP et le numéro de port
    Il reste en famine, aucune réponse

    J'ai testé en local, je lance ./serveur dans un terminal et ./client dans un deuxième terminal, lorsque je donne 127.0.0.1 ça marche mais lorsque je donne 79.80..... ça ne marche pas !!

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Alors, c'est un problème de configuration avec ta box

    regarde du côté des serveur virtuels dans la configuration

    donne nous le type de ta box (alice, free, ...) si tu ne trouves pas
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 3
    Par défaut box
    c'est la neufbox de SFR version NB4-R1.5.10-MAIN

Discussions similaires

  1. [VB.NET] Pb avec date sur VB.Net
    Par mpascolo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 06/01/2005, 09h14
  2. [C#] [WinForms] sur [VS.NET] question sur le panel
    Par onizuanda dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/12/2004, 19h00
  3. Réponses: 7
    Dernier message: 03/12/2004, 11h26
  4. les sockets sur != réseaux
    Par Hypnos dans le forum Développement
    Réponses: 2
    Dernier message: 02/03/2004, 09h45
  5. nombre de socket sur un meme port ?
    Par ginnovy dans le forum Développement
    Réponses: 3
    Dernier message: 25/10/2002, 10h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo