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

C++ Discussion :

Socket : Connexion impossible


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut Socket : Connexion impossible
    Bonjour,

    Je suis sous mac et linux sous machine virtuelle , et mon programme client ne veut pas fonctionner ..

    Quelqu'un saurait me dire d'ou vient le soucis ?
    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
     
    //
    // main.cpp
    // Projet_Systeme_Client
    //
     
    // PARTIE CLIENT //
     
     
    // ---- Inclusion des fichiers nécéssaires ---- //
     
    #include <iostream>
    using namespace std;
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <unistd.h>
     
    #define INVALID_SOCKET -1
    #define SOCKET_ERROR -1
    #define closesocket(s) close(s) // Fonction servant à fermer une socket .
     
    typedef int SOCKET;
    typedef struct sockaddr_in SOCKADDR_IN;
    typedef struct sockaddr SOCKADDR;
     
    #include <stdio.h>
    #include <stdlib.h>
    #define PORT 23
     
     
    int main(void)
    {
    int erreur=0;
     
    SOCKET sock;
    SOCKADDR_IN sin;
     
    if (!erreur)
    {
    /* Création de la socket */
    sock=socket(AF_INET,SOCK_STREAM,0);
     
    /* Configuration de la connexion */
    sin.sin_addr.s_addr=inet_addr("127.0.0.1");
    sin.sin_family=AF_INET;
    sin.sin_port=htons(PORT);
     
    /* Si le client arrive à se connecter */
    if(connect(sock, (SOCKADDR*) &sin,sizeof(sin)) != SOCKET_ERROR) // Fonciton connect pour établir une connexion du côté client :-)
    cout << " Connexion à " << inet_ntoa(sin.sin_addr) << " sur le port " << htons(sin.sin_port);
    else
    cout << " Impossible de se connecter " << endl;
     
    /* On ferme la socket précédemment ouverte */
    closesocket(sock);
    }
     
    return EXIT_SUCCESS;
    }

    J'espère que vous saurez m'aider , car j'ai beau chercher , je ne trouve pas ..Il m'affiche : " impossible de se connecter " .



    ----------------------------------------------



    De même que le programme serveur , Il m'écrit " bind " , du coup le soucis se situe au niveau du bind .

    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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    //
    // main.cpp
    // Projet_Système_Socket
    //
     
     
    // PARTIE SERVEUR //
     
     
     
    // ---- Inclusion des fichiers nécéssaires ---- //
    #include <iostream>
    using namespace std;
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <unistd.h>
     
    #define INVALID_SOCKET -1
    #define SOCKET_ERROR -1
    #define closesocket(s) close(s) // Fonction servant à fermer une socket .
     
    typedef int SOCKET;
    typedef struct sockaddr_in SOCKADDR_IN;
    typedef struct sockaddr SOCKADDR;
     
    #include <stdio.h>
    #include <stdlib.h>
    #define PORT 23
     
    int main(void)
    {
    int erreur=0;
    // Déclaration de la socket . Pour le créer , il faudra utiliser la fonction int socket (...) .
     
     
    /* Socket et contexte d'adressage du serveur */
    SOCKADDR_IN sin;
    SOCKET sock;
    socklen_t recsize=sizeof(sin);
     
    /* Socket et contexte d'adressage du client */
    SOCKADDR_IN csin;
    SOCKET csock;
    socklen_t crecsize=sizeof(csin);
     
    int sock_err;
     
    if(!erreur)
    {
    /* Création d'une socket */
     
    sock=socket(AF_INET,SOCK_STREAM,0);
    // AF_INET : Domain TCP/IP -- SOCK_STREAM : type de service pour le TCP/IP -- Protocol : 0 pas utile .
     
    /* Si la socket est valide */
     
    if (sock!=INVALID_SOCKET)
    {
    cout << " La socket " << sock << " est maintenant ouverte en mode TCP/IP " << endl;
     
    /* Configuration */
     
    sin.sin_addr.s_addr=htonl(INADDR_ANY);
    /* s_addr fait partie de la struc in_addr -- htonl permet de renvoyer le param --INNADDR_ANY signifie que le socket peut être associé à n'importe quel adresse de la machine . Donc adresse ip automatique . */
     
    sin.sin_family=AF_INET; /* Protocole familial (IP) */
    sin.sin_port=htons(PORT);
     
    sock_err= bind(sock, (SOCKADDR*) &sin ,recsize); // Lier le socket à un point de communication défini par une adresse et un port , établir la connexion avec le client .
     
    if(sock_err !=SOCKET_ERROR)
    {
    /* Démarrage du listage ( mode serveur ) */
    sock_err=listen(sock,5); // Fonction listen mettant la socket en état d'écoute -- 5 = Nombre max de connexions pouvant être mis en attente .
     
    cout << " Listage du port " << PORT << endl;
     
    /* Si la socket fonctionne */
    if (sock_err != SOCKET_ERROR)
    {
    /* Attente pendant laquelle le client se connecte */
    cout << "Patientez pendant que le client se connecte sur le port " << PORT << endl;
     
    csock= accept(sock,(SOCKADDR*) &csin, &crecsize); // csock : socket client et csin : son contexte d'adressage .
    // Fonction accept permet la connexion entre le client et le serveur en acceptant un appel de connexion -- sock : Socket serveur -- (SOCKADDR*) &csin : pointeur sur le contexte d'adressage -- &taille : il faut créer une variable , pas comme avec bind .
     
    cout << " Un client se connecte avec la socket " << csock << " de " << inet_ntoa(csin.sin_addr) << ":" << htons(csin.sin_port) << endl;
     
     
    }
    else
    cerr << "listen";
    }
    else
    cerr << "bind";
     
    /* Fermeture de la socket client et de la socket serveur */
    cout << " Fermeture de la socket client " << endl;
    closesocket(csock);
    cout << " Fermeture de la socket serveur " << endl;
    closesocket(sock);
    cout << " Fermeture du serveur terminée " << endl;
    }
    else
    cerr << "socket";
    }
     
    return EXIT_SUCCESS;
    }
    Je précise que ce sont casiment les même programme que le cours .
    Dernière modification par ram-0000 ; 25/04/2013 à 09h34.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    Pour faire un bind sur un port < 1024, il me semble qu'il faut être root et ne pas avoir de programmes qui écoutent sur le port utilisé.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Oui en effet , j'ai oublié de changer le port , je viens de m'en apercevoir .

    Merci de la remarque .
    Dernière modification par ram-0000 ; 25/04/2013 à 09h35.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/05/2015, 11h28
  2. Socket Connexion impossible.
    Par oxyaxion dans le forum Réseau
    Réponses: 2
    Dernier message: 21/02/2011, 09h14
  3. [Connexion] impossible de se connecter autrement qu'en local
    Par sekiryou dans le forum Installation
    Réponses: 4
    Dernier message: 29/03/2004, 16h19
  4. Connexion impossible
    Par david71 dans le forum Administration
    Réponses: 20
    Dernier message: 23/12/2003, 14h52
  5. [firebird] Connexion impossible en lecture seule
    Par severine dans le forum Administration
    Réponses: 2
    Dernier message: 01/08/2003, 15h35

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