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 :

Problème sockets C++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2007
    Messages : 6
    Par défaut Problème sockets C++
    Bonjour,

    J'ai un problème avec les sockets. J'ai fait un petit serveur et un client qui se connecte dessus. Mais le client n'arrive pas à ce connecter mais le programme continue quand même. Sans aucun message d'erreur. Le serveur, lui, attend sur la fonction accept et ne voit pas le client.

    Voici le code du serveur :
    Code c++ : 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
    #include <winsock2.h>    	/*socket*/
    #include<iostream>
    #pragma comment(lib, "ws2_32.lib")
     
    using namespace std;
    void main()
    {
     
    	WSADATA WSAData;
    	WSAStartup(MAKEWORD(2,0), &WSAData);
     
    	SOCKET sock;
    	SOCKET csock;
    	SOCKADDR_IN sin;
    	SOCKADDR_IN csin;
    	char buffer[BUFSIZ];;
    	sin.sin_addr.s_addr = htonl(INADDR_ANY);
    	sin.sin_family      = AF_INET;
    	sin.sin_port        = htons(200);
    	sock = socket(AF_INET,SOCK_STREAM,0);
    	bind(sock, (SOCKADDR *)&sin, sizeof(sin));
     
    	listen(sock,0);
     
    	/* connection socket */
    	int sinsize = sizeof(csin);
    	csock = accept(sock, (SOCKADDR *)&csin, &sinsize);
    	cout<<"1"<<"\n";
     
    	while(1) {
       memset(buffer, '\0', sizeof(buffer)); /*on vide le buffer*/
       recv(csock, buffer, sizeof(buffer), 0);
       cout<<buffer;
      }
    }

    Voici le code du client :
    Code c++ : 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
    #include <winsock2.h>    	/*socket*/
    #include <iostream>
    #pragma comment(lib, "ws2_32.lib")
     
    using namespace std;
    void main()
    {
     
    	WSADATA WSAData;
    	WSAStartup(MAKEWORD(2,0), &WSAData);
     
    	SOCKET sock;
    	SOCKADDR_IN sin;
    	char buffer[BUFSIZ];
     
    	sin.sin_addr.s_addr = inet_addr("25-38-998-154");
    	sin.sin_family      = AF_INET;
    	sin.sin_port        = htons(200);
    	sock = socket(AF_INET,SOCK_STREAM,0);
     
    	connect(sock, (SOCKADDR *)&sin, sizeof(sin));
    	cout<<"1"<<"\n";
     
    	while(1) {
        cout << "MSG : ";
        cin >> buffer;
        send(sock, buffer, sizeof(buffer), 0);
     
    	} 
    }

    Merci de me dire ou est le problème.
    VB

  2. #2
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Salut,

    Ne mélange pas des cout et des printf dans le code, ça peut causer des choses comme pas d'affichage.

    Pour tes cout, rajoute un <<flush ou un <<endl pour être sûr de bien afficher.

    Si le problème ne vient pas de là, je ne peux t'aider.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2007
    Messages : 6
    Par défaut
    J'ai fait les modifications mais le problème persiste. en faite, le serveur ne voit pas le client, il ne dépasse pas la fonction accept tandis que le client exécute la boucle while comme ci il s'était connécté...

    Merci de m'aider
    VB

  4. #4
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 21
    Par défaut
    Je pense qu'il serait utile de traiter les codes de retour des différentes fonctions bind, listen, accept, recv, send, connect afin de déterminer si tout ce passe bien.

    Vérifie également que le port 200 est 'libre' (c'est a dire qu'il n'y ai pas déjà une socket en écoute sur ce port dans un autre process).
    Un 'netstat -a -n' (et -b sous XP et au delà) sous un interpreteur de commande permet de vérifier si un process n'est pas en écoute sur le port (regarder les lignes indiquant "Listening").

  5. #5
    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
    Un serveur doit faire socket(), bind(); listen(), accept()
    Un client doit faire socket(), connect()

    Ton client, il fait socket(), bind(), connect(), c'est bizarre.

    De plus, et comme dit précédemment, il faut traiter les codes de retour de fonction. Cela peut aider en cas de problème. D'ailleurs, si tu les traitais, tu ne serais peut être pas sur le forum à demander pourquoi cela ne marche pas

    Tu es sûr du nom de machine "25-38-998-154" ?
    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
    .

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2007
    Messages : 6
    Par défaut
    Effectivement il n'y a pas de fonction bind pour le client. J'ai mal lu la doc

    Mais ca ne marche toujours pas, la fonction connect du client renvoit l'erreur -1.

    Je ne vois pas ou est le problème

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

Discussions similaires

  1. [Debutant] Problème Socket Linux UDP
    Par AxldenieD dans le forum Réseau
    Réponses: 3
    Dernier message: 01/11/2005, 17h08
  2. Problème Socket
    Par karl2mil1 dans le forum C++Builder
    Réponses: 3
    Dernier message: 12/09/2005, 23h35
  3. Problème socket raw ? bizarre :~
    Par MonsieurAk dans le forum Windows
    Réponses: 2
    Dernier message: 12/07/2005, 14h12
  4. [MFC] Problème Socket + Connexion SQL
    Par BananaUltra3C dans le forum MFC
    Réponses: 6
    Dernier message: 20/05/2005, 16h41
  5. [Réseau] Problème socket
    Par neenee dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 18/01/2005, 15h26

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