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 :

Gérer un réseau en C++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Par défaut Gérer un réseau en C++
    Bonjour.

    Voila j'ai un soucis ( plutot gros ). Je dois communiquer d'un PC vers un Beck, avec des Sockets, mais le probléme c'est que je n'ai pas un super niveau en C++, je ne sais pas trop comment m'y prendre, je ne sais pas du tout meme.

    Je m'occupe de la partie serveur et client.

    Dans la partie client je dois pouvoir, envoyer un message au beck, recevoir des messages du beck, vérifier si la liaison est bonne et envoyer différentes commande au Beck.

    Bref, je voulais savoir si vous auriez pas un code source, ou meme un programme qui pourrait m'aider a faire ce ravail, que je dois rendre dans 1 mois.

    Merci de vos réponses.

  2. #2
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut
    Pour le code source va faire un tour sur codesources !!
    Sinon pour tes sockets, c'est pas très dur, y'a pas mal de doc sur le net, il suffit de chercher un peu et on trouve tous ce qu'il faut savoir sur les sockets (attention tout de même car win et linux n'utilise pas les memes lib pour les sockets)

    Bonne recherche.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Par défaut
    Oups désolée, j'ignorais l'existence de cette section.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Par défaut
    Tu as le choix ;
    tu peux utiliser la classe Boost :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://cvs.sourceforge.net/viewcvs.py/boost-sandbox/boost-sandbox/boost/socket/
    tu peux aussi coder tes sockets en bas niveau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://c.developpez.com/WalrusSock/

  5. #5
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Et si tu veux de l'asynchrone portable qui va réagir aux événements, minimiser les erreurs idiotes (arguments mal utilisés), que tu lis l'anglais et que tu n'as pas peur des mastodontes, tu as ACE (c'est les tutoriels qu'ils faut lire et non la doc doxygen).
    (Il doit aussi y avoir des surcouches aux sockets dans les diverses API graphiques et plus)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Par défaut
    J'ai a peu prés compris comment ca marche, la declaration, l'envoie, la reception, mais maintenat, c'est plus un probleme de programmation pure.

    Comment dois je declarer la socket et ses parametres , faire une structure? les declarer dans le constructeur ? Comme c'est en MFC je sais pas trop comment m'y prendre, par exemple je dois envoyer un message en cliquant sur un bouton envoyer, il suffit de mettre la fonction send() ou sendto() pour que ca fonctionne ?


    Merci de vos reponse.

  7. #7
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par Lenark
    J'ai a peu prés compris comment ca marche, la declaration, l'envoie, la reception, mais maintenat, c'est plus un probleme de programmation pure.

    Comment dois je declarer la socket et ses parametres , faire une structure? les declarer dans le constructeur ? Comme c'est en MFC je sais pas trop comment m'y prendre, par exemple je dois envoyer un message en cliquant sur un bouton envoyer, il suffit de mettre la fonction send() ou sendto() pour que ca fonctionne ?


    Merci de vos reponse.
    Pour les MFC tout est décrit dans le MSDN ; il y a aussi des examples appelés SAMPLES sur le CDROM d'installation de VC ++ ( et en ligne aussi) qu'à peine 1% des gens qui utilisent VC++ connaisse.

    sinon sur www.codeproject .com il doit y avoir ce qu'il faut

    Suffit de se donner la peine de chercher un peu , la programmation de tout un réseau c'est un sujet trop vaste pour être abordé ici

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Par défaut
    Je suis vraiement dans le prétin je trouve pas l'inspiration.

    Les sockets je dois les declarer en pointeur ou pas ?
    Ou je dois les mettre dans ma classe CReseauClientDlg ou creer une autre classe CReseauClient ?


    Bref je bloque, je bloque, ca fait ne semaine que je recherche activement sur le net, mais rien ne m'ouvre vraiement la voix, si un connaisseur passe par la, merci de m'aider.

  9. #9
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut
    http://c.developpez.com/WalrusSock/

    Y'a tout ce qu'il faut savoir pour déclarer un socket, l'utiliser..... avec des exemples de codes et des explications assez claires

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Par défaut
    Citation Envoyé par niglo
    http://c.developpez.com/WalrusSock/

    Y'a tout ce qu'il faut savoir pour déclarer un socket, l'utiliser..... avec des exemples de codes et des explications assez claires
    Oui, certes c'est trés bien expliqué, mais le probléme est pas la.

    C'est du MFC et ca différe donc du C.

    Voila un exemple d'un de mes problémes.

    Une declaration d'une socket la voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SOCKET sock;
    SOCKADDR_IN sin;
    sin.sin_addr.s_addr	= inet_addr("127.0.0.1");
    sin.sin_family		= AF_INET;
    sin.sin_port		= htons(4148);
    sock = socket(AF_INET,SOCK_STREAM,0);
    bind(sock, (SOCKADDR *)&sin, sizeof(sin));
    JE dois etablir la connexion et envoyer des caractéres au serveur au moment ou j'appui sur le bouton Envoyer.

    Je dois declarer la socket dans la fonction void CGestionReseauDlg::OnOK() ?

    Ou les mettre en global ?

    Voila un de mes problémes que je n'arrive pas a resoudre.

    Merci

  11. #11
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut
    Ben tu peux faire les deux mais je pense que le mieux c'est de créer un socket global pour communiquer entre tes deux entités et comme ca tu l'as toujours sous la main pour enovyer des données quand tu cliques sur "envoyer", ou pour tout autre traitement que tu voudrais faire avec tes sockets.

    Je te conseillerais meme de faire une fonction envoyer independante de onOK() que tu pourras réutiliser autre part dans ton code ou dans un futur projet.
    Une fonction du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int envoyer (int descripteur_socket, char * texte_a_envoyer)
    {
    return(send(descripteur_socket, texte_a_envoyer, sizeof(texte_a_envoyer), 0));
    }

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Lenark
    Je dois etablir la connexion et envoyer des caractéres au serveur au moment ou j'appui sur le bouton Envoyer.
    Si tu établis la connection au moment du transfert, alors pas la peine que la socket soit globale...
    Tu fais une fonction qui prend en paramètre l'IP ou le nom d'hôte et la chaîne à envoyer. Elle se connecte, envoi, et se déconnecte, et le tour est joué

    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
    #include <string.h>
    #include <winsock2.h>
     
    #pragma comment(lib, "ws2_32.lib")
     
    int envoyer(char * ad_serveur,int port,char * chaine)
    {
        WSADATA wsa;
        /* initialisation */
        WSAStartup(MAKEWORD(2,0), &wsa);
     
        SOCKET client;
        SOCKADDR_IN sin;
     
        nom_serveur=gethostbyname(ad_serveur);
        if(nom_serveur==NULL)
        {
            return -1;
        }
     
        /* creation de la socket client */
        client = socket(AF_INET,SOCK_STREAM,0);
        if(client==INVALID_SOCKET)
        {
            return -1;
        }
     
        /* configuration de la socket */
        memcpy(&sin.sin_addr,nom_serveur->h_addr,nom_serveur->h_length);
        sin.sin_family = AF_INET;
        sin.sin_port = htons(port);
     
        /* connecter le client au serveur */
        erreur=connect(client, (SOCKADDR *)&sin, sizeof(sin));
        if(erreur==INVALID_SOCKET)
        {
            return -1;
        }
     
        /* envoyer la chaine */
        send(client,chaine,strlen(chaine));
     
        /* fin */
        closesocket(client);
        WSACleanup();
     
        /* retour */
        return 0;
    }

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Par défaut
    Genial ca fonctionne a peu prés

    Merci, mais j'ai quand meme 2-3 petite question.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nom_serveur=gethostbyname(ad_serveur);
    le type de nom_serveur c'est bien un "hostent*" ?



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    erreur=connect(client, (SOCKADDR *)&sin, sizeof(sin));
    erreur c'est bien un CString ?



    je dois passer vraiement pour un noob, mais désolé c'est le ca ^^''

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Par défaut
    le type de nom_serveur c'est bien un "hostent*" ?
    Oui tout à fait, ou bien un pointeur NULL lorsque une erreur survient

    erreur c'est bien un CString
    Non, erreur est un entier tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          int  connect(int  sockfd,  struct sockaddr *serv_addr, int addrlen);

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Par défaut
    Nickel, j'arrive a envoyer. Merci a vous tous.


    Mais le plus dur reste a faire, le serveur...


    Je pars sur le meme principe non ?

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Par défaut
    Oui sauf qu'une fois la socket créée, tu la mets sur écoute, et t'acceptes les connexions entrantes ;
    Puis tu t'apprêtes à recevoir les données du client.

    encore une fois >> http://c.developpez.com/WalrusSock/

  17. #17
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut
    Je ne sais pas si le serveur est vraiment le plus dur....enfin bref, tu peux partir de la même facon en tout cas.

    N'hésite pas à reposer des questions si tu galeres.

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Par défaut
    Citation Envoyé par niglo
    Je ne sais pas si le serveur est vraiment le plus dur....enfin bref, tu peux partir de la même facon en tout cas.

    N'hésite pas à reposer des questions si tu galeres.
    Je vais bosser sur le serveur ce week end, merci beaucoup de votre aide et de votre soutienn, j'apprécie grandement.

  19. #19
    Invité
    Invité(e)
    Par défaut
    Excuse-moi, j'ai repris un bout de code, donc j'ai oublié quelques déclarations...

    Pour le serveur, je dois avoir un bon exemple quelque part... dis-moi si tu le veux (faut voir si j'arrive à mettre la main dessus (ou la souris plutôt)).

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Par défaut
    Citation Envoyé par remram44
    Excuse-moi, j'ai repris un bout de code, donc j'ai oublié quelques déclarations...

    Pour le serveur, je dois avoir un bon exemple quelque part... dis-moi si tu le veux (faut voir si j'arrive à mettre la main dessus (ou la souris plutôt)).
    Je suis preneur, car la ce n'est pas de l'evenementiel, je dois pouvoir lire le message arrivant et l'afficher dans une editbox, donc ca differe un peu je pense.

Discussions similaires

  1. Interface pour gérer réseau dématérialisé
    Par Zubarian dans le forum Services
    Réponses: 0
    Dernier message: 12/11/2009, 12h45
  2. Réponses: 5
    Dernier message: 18/01/2008, 07h08
  3. Gérer un réseau sécurisé
    Par Shin_RockmanX dans le forum Développement
    Réponses: 12
    Dernier message: 28/09/2006, 10h14
  4. gérer mes mots de passe réseau
    Par sony351 dans le forum Administration
    Réponses: 3
    Dernier message: 20/04/2006, 22h19
  5. Comment gérer ma carte réseau en ASM
    Par will1974 dans le forum Assembleur
    Réponses: 6
    Dernier message: 23/09/2003, 17h08

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