| |
| Auteur |
Message |
|
|
SonOfSparda
|
Publié: Sam 13 Fév 2010, 16:42 |
|
|
Roboticien 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  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. |
|
|
Haut
|
|
|
galactus
|
Publié: Sam 13 Fév 2010, 16:54 |
|
|
| Roboticien débutantInscrit le: Sam 5 Déc 2009, 12:53Messages: 253 |
|
|
Haut
|
|
|
Faco
|
Publié: Sam 13 Fév 2010, 17:55 |
|
|
CurieuxInscrit 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 !
|
|
Haut
|
|
|
SonOfSparda
|
Publié: Sam 13 Fév 2010, 22:46 |
|
|
Roboticien 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  ... 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. |
|
|
Haut
|
|
|
SonOfSparda
|
Publié: Dim 14 Fév 2010, 18:16 |
|
|
Roboticien 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),&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 *)&sin, sizeof(sin)); char buffer[100]; int i=0; listen(sock,0); while (1) { sprintf(buffer,"Follow the white rabbit :: iteration %d",i); i++; int sinsize= sizeof(csin); if((csock = accept(sock,(SOCKADDR *)&csin, &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),&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("192.168.1.10"); // 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 *)&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 << msg << 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. |
|
|
Haut
|
|
|
SonOfSparda
|
Publié: Mer 17 Fév 2010, 09:14 |
|
|
Roboticien 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.htmlC'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. |
|
|
Haut
|
|
|
galactus
|
Publié: Mer 17 Fév 2010, 09:27 |
|
|
| Roboticien débutantInscrit le: Sam 5 Déc 2009, 12:53Messages: 253 |
 dis donc
|
|
Haut
|
|
|
|
Heures au format UTC
Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité
|
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
|
|
|