LES SOCKETS C++ COMME DS MIRC : TOUT EST SIMPLE AVEC LA CLASSE PROSOCK

cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 - 18 févr. 2004 à 16:59
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013 - 14 sept. 2006 à 18:49
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/20546-les-sockets-c-comme-ds-mirc-tout-est-simple-avec-la-classe-prosock

SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
14 sept. 2006 à 18:49
c'est quoi ton message d'erreur ?
SOAD08 Messages postés 1 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 14 septembre 2006
14 sept. 2006 à 18:13
Je dois etre le seul a avoir des problemes.... j'ai une magnifique linker error quelqu'un sait d'ou ça peut venir?
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
24 juin 2006 à 12:52
Salut, d'abord bravo pour cette classe, c'est effectivement un jeu d 'enfant avec elle mais j'aurais 2 petites questions.
Est qu'on est sur que l'autre personne a bien recu les messages envoyés ou il vaut mieux que le client reponde au serveur qu'il a bien recu les commandes ? En fait je l'utilise dans un jeu en reseau et le serveur envoi des infos au client et tant que le client ne recoit pas ces infos il bloque, si les données se perdent c'est foutu (en UDP par exemple le serveur envoi des paquets mais se fout de savoir si ils sont recus).
Pour "nettoyer" les connections est ce que sockclose suffit ? En fait je lance l'appli en mode serveur puis 5 min apres je la relance en mode client sans rien redemarrer juste en faisant un sockclose puis de nouveau SockPrinc = CreateProSocket(ServerProc);
Hades53 Messages postés 231 Date d'inscription mercredi 12 février 2003 Statut Membre Dernière intervention 7 juillet 2009
27 juin 2005 à 01:13
Vraiment très très bien !

Effectivement, ça rend les socket beaucoup plus simples :)
10/10
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
31 mai 2005 à 08:26
salut,
dsl de répondre 10ans apres.
si tu veux faire un truc pareil, faut que tu connaisses precisement le protocole utilisé par un vpn (qui se base peut etre aussi en partie sur des sockets udp tiens)
A mon avis c'est pas évident, mais c'est en tout cas pas le sujet de cette source, meme si elle peut te simplifier legerement les choses qd tu en seras a la partie purement socket...
CptLuthor Messages postés 25 Date d'inscription dimanche 7 novembre 2004 Statut Membre Dernière intervention 9 décembre 2004
8 nov. 2004 à 15:52
salut
Moi je voudrai réaliser un client et un server VPN le plus simple possible, c a d je lance le server (un .exe tout petit) , mes pots lancent chacun le client ( un .exe tout petit ) et hop on est connecté à distance et on se voit sur le réseau.

je précise je ne ve pas de service de messagerie, c a d je ve juste quon se voi en reseau comme ca on se voit dans les jeux comme si on été en reseau local.

voila merci à ce qui pourront maider
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
25 avril 2004 à 13:19
il suffit de ne pas fermer le socket qui ecoute au moment ou quelqu'un se conecte (mais d'incrémenter un compteur qui est une variable globale par exemple).
tu mets ca au début du code du serveur en remplacement de 'ProSock SAccept = CreateProSocket(ServerProc);'

int compteur = 1;
ProSock SAccept1 = CreateProSocket(ServerProc);
ProSock SAccept2 = CreateProSocket(ServerProc);
ProSock SAccept3 = CreateProSocket(ServerProc);

et dans ListenProc tu mets :

case ON_SOCKLISTEN:
{
printf("Un client est arrive\n");
if (compteur == 1)
s->SockAccept(&SAccept1);
else if (compteur == 2)
s->SockAccept(&SAccept2);
if (compteur == 3)
s->SockAccept(&SAccept3);
compteur++;
// On peut choisir ou nom de fermer une fois que quelqu'un s'est connecté
// s->SockClose(); on ne le ferme plus...
break;
}


il faut encore adapter le code pour que quand un client se déconecte, on décremente compteur, et qu'on puisse a nouveau utiliser le bon SAccept. Mais bon ca ce n'est plus tellement de l'utilisation de la classe, c'est de la prog plus générale....

voir aussi la remarque sur la maniere de créer un tableau de prosocket. possibilité également d'utiliser le champ State de la classe, pour voir si un proSocket est toujours en train d'etre utilisé. (a vous de le changer aux bons moments)
a++ ;p
cs_lepins Messages postés 2 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 21 avril 2004
19 avril 2004 à 17:45
Bonjour tout le monde,

je suis etudiant et j'aimerai travailler sur ce code mais seulement je n'arrive pas à le modifier pour pouvoir utiliser plusieurs clients.
En fait, je ne sais pas comment faire car les classes c'est un mystère pour moi.
En effet, je voudrais pouvoir avoir un serveur et deux ou trois clients.
Donc si quelqu'un pourrait m'aider cela serait sympa.

Merci
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
20 févr. 2004 à 12:29
en+ la c'et l'exemple du serveur ou client telnet ou tu dis ca, c'est pas ce qui a ds la classe... tout ce qui est c marche encore en c++, l'inverse est faux. la c'est une classe, donc de toutes manieres ca tient pas en c pur... voila !! :p pour autant est ce qu'on doit rien utiliser des anciennes librairies du c ? chacun fait comme il veut...
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
20 févr. 2004 à 12:24
et ? jvois pas trop ou est l'problème... une classe sur les sockets de toutes maniere, a partir du moment ou classe c'est du c++ et que les sockets c'est du c bon...
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
20 févr. 2004 à 01:52
un autre bémol => c'est un mélange complet entre le C et le C++ :p

s->SockAccept(&SAccept); => c'est du C++
strcmp(chaine,"exit") => c'est du C (en C++ on utilise les std::string
printf("Un client est arrive\n"); => c'est du C (std::cout << "Un client est arrive\n"; en c++)

etc ...
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
18 févr. 2004 à 23:30
ué ca marche ke sur windows pour une raison : jsais pas trop comment on fait des thread et des events sur unix. meme si c'est pas compliké, vu kjpeu pas tester... voila koi ! :p
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
18 févr. 2004 à 23:27
Super =D
Le code est bien commenté, bien architecturé .... Ca va me servir, c est clair.
Le seul bémol -> ca marche que sous windows :/
Enfin bon, ca peut donner des idées pour un portage éventuel vers d autres librairies ...
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
18 févr. 2004 à 16:59
n'hésitez pas à faire pleins de remarques, positives ou negatives!
Rejoignez-nous