Positron libre     EasyRobotics     Robot-passion     Assoc-Caliban     AMF     NaoForge     MbRobot 
Auteur Message

Index du forum <  Programmation  ~  C++ et réseau

MessagePublié: Sam 13 Fév 2010, 16:42
Avatar de l’utilisateurRoboticien confirméInscrit le: Sam 25 Oct 2008, 23:01Messages: 547
Salut!

Voilà j'ai besoin de faire communiquer deux programmes en réseau, mais je n'ai aucune expérience dans ce domaine.

J'ai des vues sur deux bibliothèques: la SDL_NET et boost.asio.

Ce que je veux faire c'est transférer des structures d'un programme à l'autre mais je trouve pas vraiment d'info là dessus. Ni sur la programmation réseau tout court d'ailleurs... C'est sûrement faisable mais est-ce qu'il me faut une lib haut niveau ou quoi j'en sais rien du tout.

Donc si vous avez de l'expérience là dedans ce serait super sympa de m'aiguiller.

PS:Je me permet d'être difficile :peur: j'ai pas envie d'utiliser un monstre comme Qt.



_________________
Projet en cours: classe d'acquisition visuelle et de sauvegarde Statut: [Terminé]

programmeur
langages: C, C#, C++,asp, php,SQL,javascript,CSS.
Hors-ligne Profil
MessagePublié: Sam 13 Fév 2010, 16:54
Roboticien débutantInscrit le: Sam 5 Déc 2009, 12:53Messages: 253
tiens,voila te quoi t'en sortir:
http://c.developpez.com/cours/sockets-c ... mystifies/

:D
ne panique pas,respire lentement....tout va tres bien se passer :lol: :lol:


Hors-ligne Profil
MessagePublié: Sam 13 Fév 2010, 17:55
Avatar de l’utilisateurCurieuxInscrit le: Ven 6 Nov 2009, 15:26Messages: 21Localisation: oui
Hello,

Pour ma part, en C++, j'ai tendance à utiliser le Qt network module lorsque mon programme utilise d'autres "briques" Qt (comme une IHM Qt avec le widget OpenGL par exemple), afin de minimiser les bibliotheque différentes. L'avantage de Qt, c'est que la documentation est top et tu as des tutoriaux.

Sinon, si tu ne veux pas embarquer de Qt, je te recommande boost qui est une mine d'or (pas que pour le réseau).

Concernant la SDL, je ne l'ai jamais utilisée pour le réseau, donc je ne sais pas.

Un tuto boost que j'avais utilisé à un moment:
http://gwenael-dunand.developpez.com/tutoriels/cpp/boost/asio/ (A lire à tête reposée ^^ )

Good luck !


Hors-ligne Profil
MessagePublié: Sam 13 Fév 2010, 22:46
Avatar de l’utilisateurRoboticien confirméInscrit le: Sam 25 Oct 2008, 23:01Messages: 547
@Galactus

PTDR comme tu y vas !
Le pire c'est que je commence a regarder... bien encapsulé dans une fonction...

Quand meme ca me dépasse, ils nous sortent des windows seven co et ils ont rien changé a ce win32 depuis 98 qui est pire qu'obsolete. Ca, à tout les coups c'est pour promouvoir leur C# qui doit avoir des surcouches toutes jolies.

@Faco

Mon sauveur du C++, bah ouais la pour le coup j'utilisais pas Qt, ce qui me gonfle avec Qt c'est que quand tu t'y lance tu fais "du QT" ton programme est vraiment axé autour de ça, ton IDE aussi d'ailleurs. En plus Qt sous windows :roll: ...

J'ai déjà utilisé le module opengl pour une visionneuse mais après c'est pareil faut adopter l'optique QT: paintGl and co.

Je crois que choisir ses outils c'est la moitié du travail du développeur...

C'est chiant j'ai mon serv sous windows et mon client sous nunux... Les deux utiliseront openGL... Quand même dingue que personne ai fait une classe "connexion" avec des methodes envoyer et recevoir...

Bon je vais essayer winsock, si demain j'ai pas posté appelez les pompiers.



_________________
Projet en cours: classe d'acquisition visuelle et de sauvegarde Statut: [Terminé]

programmeur
langages: C, C#, C++,asp, php,SQL,javascript,CSS.
Hors-ligne Profil
MessagePublié: Dim 14 Fév 2010, 18:16
Avatar de l’utilisateurRoboticien confirméInscrit le: Sam 25 Oct 2008, 23:01Messages: 547
*apparait vaillamment dans un horizon de crépuscule, le regard humide et lointain, le corps meurtri mais le coeur gonflé*

Bon alors je me suis lancé dans winsock aux frontières de l'assembleur. J'ai réussi un couple client serveur avec un serveur qui envoie une phrase et un client qui l'affiche.

serveur
Code:
 
#include <iostream>
#include <winsock2.h>
 
using namespace std;
 
int main()
{
    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,0),&amp;WSAData);
 
    SOCKET sock;
    SOCKET csock;
    SOCKADDR_IN sin;
    SOCKADDR_IN csin;
 
    sin.sin_addr.s_addr = htonl(INADDR_ANY);
    sin.sin_family = AF_INET;
    sin.sin_port = htons(4148);
    sock = socket(AF_INET,SOCK_STREAM,0);
    bind(sock, (SOCKADDR *)&amp;sin, sizeof(sin));
 
    char buffer[100];
    int i=0;
 
    listen(sock,0);
 
    while (1)
    {
        sprintf(buffer,&quot;Follow the white rabbit :: iteration %d&quot;,i);
        i++;
        int sinsize= sizeof(csin);
        if((csock = accept(sock,(SOCKADDR *)&amp;csin, &amp;sinsize)) !=INVALID_SOCKET)
        {
            send(csock, buffer, sizeof(buffer), 0);
        }
    }
 
    return 0;
}
 


Client
Code:
 
#include <iostream>
#include <string>
#include <winsock2.h>
 
using namespace std;
 
int main()
{
    WSADATA WSAData; // création  de la variable qui sert a se connecter
    WSAStartup(MAKEWORD(2,0),&amp;WSAData);
 
    SOCKET sock; // creation du socket qui va servir a recevoir
    SOCKADDR_IN sin; // creation de sa configuration
 
    string msg, premsg; // strings qu iaccueilleront le message reçu pour son affichage
    char buffer[40]; // buffer qui contiendra les infos reçues
    string o;
 
    sock = socket(AF_INET,SOCK_STREAM,0); // affectation du socket (parametres copiés sur le web me demandez pas le pourquoi du comment)
 
 
        // affectation de la configuration
    sin.sin_addr.s_addr = inet_addr(&quot;192.168.1.10&quot;); // on renseigen l'adresse ip a laquelel se connecter
    sin.sin_family= AF_INET; //euh... d'apres le tuto AF_INET serait pas mal utilisée pour la communication par le net
    sin.sin_port= htons(4148); // et enfin le port auxquel se connecter chez moi serv et client ont le meme mais je crois qu'on peux en mettre deux differents
 
    while (1)
    {
        connect(sock,(SOCKADDR *)&amp;sin,sizeof(sin));//chez le client pas de bind me demandez pas pourquoi on utilise ici connect
        //qui va utiliser la config qu'on a renseigné plus haut
        recv(sock,buffer,sizeof(buffer),0); // on recoit le paquet (sureprenant non?) en lui filant le socket sur lequel on veux recevoir, la ou  veux mettre le message, et la taille de cet emplacement
        // la aussi pourquoi lui donner la taille comme si il pouviat pas le faire seul... et le 0 inventé en mésopotamie au III eme siecle avant J.C.
        closesocket(sock);// on ferme le socket
 
        msg = buffer;
        if (msg != premsg) // on test si le message recu est different du dernier, si il l'est on l'affiche
        {
        cout &lt;&lt; msg &lt;&lt; endl;
        premsg=msg;
        }
    }
 
    WSACleanup();// on ferme la connexion, quelle péripetie !
    return 0;
}
 


Le résultat est pas tout a fait attendu, enfait l'itération s'incrémente qu'en déconnectant et en reconnectant le client. Le accept doit être bloquant qu'en pensez vous?

Enfait c'est cette histoire de mode connecté /déconnecté qu'il faut que je comprenne. Faire du bloquant ou non bloquant, en espérant que je sois pas obligé de faire des threads une prise de tête comme ça par semaine ça suffit. Ah et pour les structures bah on peut pas directement il faut les caster en char.

PS: je démarre aujourd'hui mon deuxième mandat de roi des cons, en cherchant pendant une heure une fonction pour convertir un tableau de char en string, conversion qui se fait de cette manière: maString = monTabChar



_________________
Projet en cours: classe d'acquisition visuelle et de sauvegarde Statut: [Terminé]

programmeur
langages: C, C#, C++,asp, php,SQL,javascript,CSS.
Hors-ligne Profil
MessagePublié: Mer 17 Fév 2010, 09:14
Avatar de l’utilisateurRoboticien confirméInscrit le: Sam 25 Oct 2008, 23:01Messages: 547
J'ai mis un bool dans mes boucles pour que connect ne s'exécute qu'une fois, ducoup je peux maintenant transmettre autant de données que je veux, mais si le client se déconnecte et essaye de se reconnecter il peux plus recevoir le flux.


Par contre j'ai trouvé un super tuto:
http://www.siteduzero.com/tutoriel-3-32 ... ckets.html

C'est bien simple ça parle de tout et en restant quand meme bas niveau. Ca explique aussi comment faire une connexion qui fonctionne entre des machines différentes. Bon bein moi ce week end je nous mitonne une classe "connexion" aux petits oignons.



_________________
Projet en cours: classe d'acquisition visuelle et de sauvegarde Statut: [Terminé]

programmeur
langages: C, C#, C++,asp, php,SQL,javascript,CSS.
Hors-ligne Profil
MessagePublié: Mer 17 Fév 2010, 09:27
Roboticien débutantInscrit le: Sam 5 Déc 2009, 12:53Messages: 253
:bravo: dis donc :)


Hors-ligne Profil

Afficher les messages depuis:  Trier par:

Heures au format UTC
Page 1 sur 1
7 messages
Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité
Rechercher pour:
Publier un nouveau sujet  Répondre au sujet
Sauter vers:  
Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum