coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 2012
-
28 août 2004 à 12:57
diagnebabacar0
Messages postés8Date d'inscriptionsamedi 30 janvier 2010StatutMembreDernière intervention 2 juillet 2013
-
31 août 2012 à 04:43
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
diagnebabacar0
Messages postés8Date d'inscriptionsamedi 30 janvier 2010StatutMembreDernière intervention 2 juillet 2013 31 août 2012 à 04:43
super super super ! rien que de voir comment ca marche avec les thread qui sont trop compliqués pour moi(je suis un grand debutant )!
mais pour le client on fait deux thread d envoie et de réception ! ca serait super d en connaitre plus du coté client ! mais je vais éssayer de me casser la tête pour le client ca vais étre compliqué mais je vais prendre comme référence le code serveur !
merci pour le savoir que vous partager ! merci d étre genereux de ton savoir MetalDwarf .
oazize
Messages postés1Date d'inscriptionlundi 10 novembre 2003StatutMembreDernière intervention25 septembre 2007 25 sept. 2007 à 13:13
Code super propre!! merci c'est génial
Je digere le code et j'essairai de faire un client en flash.
Merci encore
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 6 nov. 2006 à 08:50
G 1 truK bi1 pr ke tu puiS nou liR...
On va tous parler corectement ok ? sinon, ça risque de devennir totalement illisible...
tu tapes :
user@linux$ telnet host port
dans une console linux
Moi j'ajoute un message pour remercier MetalDwarf, je lui dois mon augmentation de niveau depuis ces trois dèrnières années...
cs_facilus
Messages postés33Date d'inscriptionlundi 19 juin 2006StatutMembreDernière intervention15 novembre 2007 5 nov. 2006 à 00:28
j'ai lancé le source sous linux ,avec la commande " ./server " , mais je ne sais pas ce k'il faus faire par la suite , est ce ke je doit ecrire un autre programme pour ke le chatr fonctionne ???
merci de m'indiquer comment faire marchee ce source client /serveur
cyrtex
Messages postés3Date d'inscriptionlundi 22 novembre 2004StatutMembreDernière intervention 1 octobre 2007 21 juin 2006 à 14:53
Pour ceux que ça interesse, voici un client ligne de commande fonctionnant avec ce serveur de chat:
Il s'agit d'un "simple" programme telnet adapté pour faire en sorte que les messages arrivant ne viennent pas perturber la saisie d'un message en cours.
cs_chermy
Messages postés1Date d'inscriptionvendredi 17 janvier 2003StatutMembreDernière intervention18 avril 2006 18 avril 2006 à 16:08
j'aimerai savoir comment fait on pour avoir le client socket pour se connecter au serveur
merci d'avance
blade_m
Messages postés4Date d'inscriptionmercredi 27 octobre 2004StatutMembreDernière intervention29 octobre 2004 29 oct. 2004 à 21:09
Merci bcp, je vais essayer ca!
MetalDwarf
Messages postés241Date d'inscriptionmardi 29 octobre 2002StatutMembreDernière intervention23 janvier 2006 29 oct. 2004 à 11:00
Dans ce cas, recuperer ce serveur peut etre utile!!
Pour ecrire un client, c es vraiment pas dur il suffit de creer 2 threads (un pour lire l entree et un pour recevoir ce que dit le serveur), ou alors d utiliser select(). Le petit probleme c est que si un message arrive pendant que tu es en train d ecrire kkchose, ca va couper en 2 ce que tu ecris. Tu peux alors soit utiliser des entrees/sorties bloquantes (donc ne pas utiliser select() ni de threads), ou alors chercher dans la doc de ncurses (librairie permettant d avoir une interface "graphique" en mode console... enfin comme emacs a peu pres ou edit sous DOS...) si tu ne peux pas faire ca autrement.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 29 oct. 2004 à 10:17
forum mode console...
blade_m
Messages postés4Date d'inscriptionmercredi 27 octobre 2004StatutMembreDernière intervention29 octobre 2004 29 oct. 2004 à 10:11
Merci
Mais je dois faire ce projet sous linux en mode console, donc pas d'interface graphique!
aue des lignes de commandes
MetalDwarf
Messages postés241Date d'inscriptionmardi 29 octobre 2002StatutMembreDernière intervention23 janvier 2006 28 oct. 2004 à 15:58
Incroyable, coucou47 repond plus vite que moi aux commentaire sur ma source!!
Si tu veux etendre ce serveur, ca doit se faire sans trop de mal, d utant plus qu il ne manque presque rien pour faire de ce serveur un module integrable independamment du reste.
Si tu doit faire un client/serveur comme ca, tu peux batir une interface graphique sur un client tout simple, je pense que si tu connais la programmation graphique ca ne devrait pas etre trop long. Par contre pour faire un forum, il va falloir aller chercher ailleurs, car si tu veux modifier ce serveur pour ca il va falloir mettre beaucoup de choses en plus. Le plus simple dans ce cas est peut etre d utiliser le protocole HTTP et d'integrer php a ton serveuir (ce qui se fait tres facilement sous Unix, il suffit de recuperer la sortie de la page php passee au programme php).
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 28 oct. 2004 à 13:19
dans ce cas je teproposes d'adapter ce serveur au languge http, et t'auras pas a programmer le client, t'auras Mozilla ou Ie pour ça.
blade_m
Messages postés4Date d'inscriptionmercredi 27 octobre 2004StatutMembreDernière intervention29 octobre 2004 28 oct. 2004 à 13:16
car j'ai un projet pour mes études:
faire un client/serveur avec forum, administration, chat...
Merci
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 28 oct. 2004 à 09:31
telnet marche très bien, sinon tu peux en écrire un (regardes la caprure d'écran, c'etstrsè joli KDE)
blade_m
Messages postés4Date d'inscriptionmercredi 27 octobre 2004StatutMembreDernière intervention29 octobre 2004 28 oct. 2004 à 09:10
Petite question, aurais tu le client qui va avec le serveur?
Merci
FearBlue
Messages postés149Date d'inscriptionlundi 15 septembre 2003StatutMembreDernière intervention26 octobre 2008 13 sept. 2004 à 22:05
oki merci les gars ca marche nikel
merci bcp
++ et bonn prog's
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 13 sept. 2004 à 21:26
c'est ce que j'ai dit, t'as ces options tt au début de ta source en commentaire, faut pasque compiler, faut lire aussi ^^
MetalDwarf
Messages postés241Date d'inscriptionmardi 29 octobre 2002StatutMembreDernière intervention23 janvier 2006 13 sept. 2004 à 20:41
Non c est pas la qu est le probleme. Le probleme c est que la source utilise la bibliotheque pthread, (qui est presente sur tous les systemes), et donc il faut preciser l option -lpthread a gcc ou g++. Ca devrait quand meme passer avec g++, mais c est du C, donc gcc!!
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 13 sept. 2004 à 19:58
si tu lis la première ligne de la source, t'as la ligne de code a passer au compilo... et bizarement, comme ce programem est en C etpas en C++, on utilises gcc et pas C++
Moi je l'ai pas testé sous mandrake 10.0 mais 10.1, et si tu regardes la copie d'écran, tu devrais voir rapidement que metaldwarf est sous le même os que toi
FearBlue
Messages postés149Date d'inscriptionlundi 15 septembre 2003StatutMembreDernière intervention26 octobre 2008 13 sept. 2004 à 19:55
slt a tous
je susi sous MANDRAKE 10.0
et g l'erreur suivante lors de la compilation
[florian@athlon serveur chat]$ g++ server_flo.c -o server2
/home/florian/tmp/cck6idJN.o(.text+0xe40): In function `main':
: undefined reference to `pthread_create'
collect2: ld returned 1 exit status
[florian@athlon serveur chat]$ g++ server_flo.c -o server2
/home/florian/tmp/cceCSeu4.o(.text+0xc78): In function `interact(void*)':
: undefined reference to `pthread_cancel'
/home/florian/tmp/cceCSeu4.o(.text+0xe52): In function `main':
: undefined reference to `pthread_create'
collect2: ld returned 1 exit status
g essayer avec Gcc et c pareil
si vous savez ???
MetalDwarf
Messages postés241Date d'inscriptionmardi 29 octobre 2002StatutMembreDernière intervention23 janvier 2006 3 sept. 2004 à 20:23
Oui c est vrai que j aurais pu le signaler... Et ce n est pas dur a programmer, les threads c est facile (la preuve, le code est simple), il faut seulement connaitre l API, et faire attention d eviter les corruptions eventuelles de donnees avec des mutex (ici c est simple il n y en a qu un seul, et pas de variable de condition). D ailleurs je ne connais pas trop les threads, c est mon premier code ou je les emploie!!
Pour porter ce code sous windows, il y acdeux problemes : les socket et les threads. Les sockets ce n est pas trop un probleme, en modifiant les fonctions create_server() et server_accept() ca passe sans probleme (et en rajoutant un appel a la fonction d initialisation des sockets windows). Par contre pour les threads l API utilisee ici est celle des threads POSIX (donc *hautement* portable), mais windows a sa propre API, et je ne sais pas comment adapter (bien sur les mutex existent aussi sous windows mais l API differe). Le mieux est d aller voir sur MSDN je pense, et peut etre que microsoft offre une compatibilite avec l API POSIX (j espere...).
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 3 sept. 2004 à 19:53
bon, c'e"ts vrai que le code du linux mag n'était qu'une partie de carte par rapport au tien, je n'ai jamais voulu dire que ton travail était nul, j'ai d'ailleur souligné être dans l'incapacitée de faire ce genre de serveru, même avec le linuxmag... les threads je ne maitrises pas... et son code n'était pas mature... Tu es largement meilleur programmeur que moi, je n'ai jamais dis le contraire, mais tu aurais pu signaler le fait que ces deux fonctions apartiennent à qqn d'autre..
Sinon, j'ai un copain qui cherches a porter ce logiciel, on peut le faire comment pour qu'il fonctionne sous windows ? (quelle idée aussi de vouloir faire du windows réseau... ^^)
MetalDwarf
Messages postés241Date d'inscriptionmardi 29 octobre 2002StatutMembreDernière intervention23 janvier 2006 3 sept. 2004 à 17:46
coucou47> He he oui le code de base des sockets reseaux est celui du Linux Magazine 41. En fait j avais recopie les fonctions create_server() et server_accept() au moment de la parution de ce Linux Magazine et depuis je fais un copier-coller de ces fonctions dans tous mes codes reseaux. Je precise quand meme que ce sont des fonctions de base qui se trouvent un peu partout (comme le fait remarquer l auteur de cet article dans un autre Linux Mag).
Sinon tout le code du serveur en lui meme est evidemment de moi, et en particulier la gestion des threads qui est le point que je voulais etudier en programmant ce serveur.
jom1012> Merci pour le code ca fait plaisir. Pour la liste des clients connectes c est tres simple, c est une commande qui est deja implementee dans le serveur. Si tu regarde bien c est la commande "/list". En fait toute les informations sur les clients sont contenus dans un tableau de pointeur sur une structure qui contient les infos sur le client, dont un champ pseudo (un char *) qui est le pseudo du client en question. Pour obtenir la liste des clients il suffit alors (cote serveur) de lire ces valeurs en parcourant le tableau (apres verrouillage de la structure par le mutex). Si tu veux rajouter des commandes c est tres simple. Il n y a qu une seule question a se poser : est ce que ma commande DOIT acceder (en lecture ou ecriture) au tableau des clients connectes? Si c est le cas il faut prendre le mutex AVANT de manipuler et le relacher APRES, en le gardant le moins de temps possible. D ailleurs le code peut etre ameliore en certains endroits car ceratines fonctions peuvent etre bloquantes sont appeles alors que le mutex est pris mais ce probleme n est pas tres grave. Si tu ne fais que toucher a me (la structure du client), il ne sert a rien de toucher au mutex.
Pour la realisation d un client en C/GTK je suis tout a fait pour, et je voulais le faire mais je ne connais pas le gtk et je n ai pas le temps pour me plonger dedant. Donc bien sur que tu as le droit de reprendre ce que j ai fait si tu mentionnes que le serveur original est de moi et que tu mets ce que tu as faut sur ce site.
Voila si tu as d autres questions je suis la pour y repondre.
jon1012
Messages postés1Date d'inscriptionsamedi 10 mai 2003StatutMembreDernière intervention 3 septembre 2004 3 sept. 2004 à 00:44
Salut, j'adore ton code (pris sur linux mag ou pas je m'en fiche lol, t'es un boss ;)) !
Par contre, je cherche comment envoyer une liste des clients connectés (je compte faire un client en gtk/c derriere ton serveur un peu modifié, si tu m'en donne l'autorisation bien sur !), si tu pouvais me mettre sur la piste ce serait génial, je n'y comprend pas grand chose en interactions entre threads et la maniere dont je peux trouver la liste de tous les users connectés...
Enfin voilà...
Si tu veux, je pourrais poster ici le code modifié du serv pour aller avec mon client ainsi que mon client (qui normalement sera portable sous windows) :)
Voili voilà, donc bah si tu pouvai me donner ton autorisation de continuer ce que je fais :) (la license n'etant pas indiquée... si c'est du gpl, n'hésite pas à me le dire lol ;))
Voilà ! En tout cas, très bon code, bravo !
Jonathan
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 2 sept. 2004 à 21:21
j'eesayais de m'inspirer de ton code pour le faire sans threads... et j'ai aussi lu le linux mag 41...
j'ai croisé une étrange ressemblance entre les deux codes présentés, évidement, le tien a des threads que le code du linux mag n'a pas, mais c'est les mêmes noms de variables, parfois les mêmes lignes...
bon, je ne suis pas capable de reprendre un code de linux mag pour y ajouterdes threads, mais par contre le repater si...
D'ou viennent ces ressemblances ?
MetalDwarf
Messages postés241Date d'inscriptionmardi 29 octobre 2002StatutMembreDernière intervention23 janvier 2006 28 août 2004 à 16:46
Oui ce serveur n est pas concu pour repondre au protocole IRC (trop complique!!) meme si ca doit etre faisable avec du temps...
et oui, mandrake 10.0 mais avec kernel et compilateur recompiles et mis a jour
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 28 août 2004 à 12:57
Mandrake 10.0 ?
Je croyais que xmms ne fonctionnait pas sur cet os ??? Bon, ça devait être spécifique a ma carte son lol...
Mais c'ets quoi ton pc pour survivre a 2 konqueror + xmms + 6 consoles dnas 1 terminal + un autre terminal + kwrite et tt ça dans un suel bureau .....? les 5 autres bureaux ont l'air d'être aussi pleins...
pas mal le système... j'ai esayé ton serveru sur un navigateur web... bon, ça marche pas, mais fallait s'y attendre, en telnet c'est parfait !
Se compile aussi bien sous mandrake 10.1
31 août 2012 à 04:43
mais pour le client on fait deux thread d envoie et de réception ! ca serait super d en connaitre plus du coté client ! mais je vais éssayer de me casser la tête pour le client ca vais étre compliqué mais je vais prendre comme référence le code serveur !
merci pour le savoir que vous partager ! merci d étre genereux de ton savoir MetalDwarf .
25 sept. 2007 à 13:13
Je digere le code et j'essairai de faire un client en flash.
Merci encore
6 nov. 2006 à 08:50
On va tous parler corectement ok ? sinon, ça risque de devennir totalement illisible...
tu tapes :
user@linux$ telnet host port
dans une console linux
Moi j'ajoute un message pour remercier MetalDwarf, je lui dois mon augmentation de niveau depuis ces trois dèrnières années...
5 nov. 2006 à 00:28
merci de m'indiquer comment faire marchee ce source client /serveur
21 juin 2006 à 14:53
http://globnet.free.fr/include/m1-client.exe
Il s'agit d'un "simple" programme telnet adapté pour faire en sorte que les messages arrivant ne viennent pas perturber la saisie d'un message en cours.
18 avril 2006 à 16:08
merci d'avance
29 oct. 2004 à 21:09
29 oct. 2004 à 11:00
Pour ecrire un client, c es vraiment pas dur il suffit de creer 2 threads (un pour lire l entree et un pour recevoir ce que dit le serveur), ou alors d utiliser select(). Le petit probleme c est que si un message arrive pendant que tu es en train d ecrire kkchose, ca va couper en 2 ce que tu ecris. Tu peux alors soit utiliser des entrees/sorties bloquantes (donc ne pas utiliser select() ni de threads), ou alors chercher dans la doc de ncurses (librairie permettant d avoir une interface "graphique" en mode console... enfin comme emacs a peu pres ou edit sous DOS...) si tu ne peux pas faire ca autrement.
29 oct. 2004 à 10:17
29 oct. 2004 à 10:11
Mais je dois faire ce projet sous linux en mode console, donc pas d'interface graphique!
aue des lignes de commandes
28 oct. 2004 à 15:58
Si tu veux etendre ce serveur, ca doit se faire sans trop de mal, d utant plus qu il ne manque presque rien pour faire de ce serveur un module integrable independamment du reste.
Si tu doit faire un client/serveur comme ca, tu peux batir une interface graphique sur un client tout simple, je pense que si tu connais la programmation graphique ca ne devrait pas etre trop long. Par contre pour faire un forum, il va falloir aller chercher ailleurs, car si tu veux modifier ce serveur pour ca il va falloir mettre beaucoup de choses en plus. Le plus simple dans ce cas est peut etre d utiliser le protocole HTTP et d'integrer php a ton serveuir (ce qui se fait tres facilement sous Unix, il suffit de recuperer la sortie de la page php passee au programme php).
28 oct. 2004 à 13:19
28 oct. 2004 à 13:16
faire un client/serveur avec forum, administration, chat...
Merci
28 oct. 2004 à 09:31
28 oct. 2004 à 09:10
Merci
13 sept. 2004 à 22:05
merci bcp
++ et bonn prog's
13 sept. 2004 à 21:26
13 sept. 2004 à 20:41
13 sept. 2004 à 19:58
Moi je l'ai pas testé sous mandrake 10.0 mais 10.1, et si tu regardes la copie d'écran, tu devrais voir rapidement que metaldwarf est sous le même os que toi
13 sept. 2004 à 19:55
je susi sous MANDRAKE 10.0
et g l'erreur suivante lors de la compilation
[florian@athlon serveur chat]$ g++ server_flo.c -o server2
/home/florian/tmp/cck6idJN.o(.text+0xe40): In function `main':
: undefined reference to `pthread_create'
collect2: ld returned 1 exit status
[florian@athlon serveur chat]$ g++ server_flo.c -o server2
/home/florian/tmp/cceCSeu4.o(.text+0xc78): In function `interact(void*)':
: undefined reference to `pthread_cancel'
/home/florian/tmp/cceCSeu4.o(.text+0xe52): In function `main':
: undefined reference to `pthread_create'
collect2: ld returned 1 exit status
g essayer avec Gcc et c pareil
si vous savez ???
3 sept. 2004 à 20:23
Pour porter ce code sous windows, il y acdeux problemes : les socket et les threads. Les sockets ce n est pas trop un probleme, en modifiant les fonctions create_server() et server_accept() ca passe sans probleme (et en rajoutant un appel a la fonction d initialisation des sockets windows). Par contre pour les threads l API utilisee ici est celle des threads POSIX (donc *hautement* portable), mais windows a sa propre API, et je ne sais pas comment adapter (bien sur les mutex existent aussi sous windows mais l API differe). Le mieux est d aller voir sur MSDN je pense, et peut etre que microsoft offre une compatibilite avec l API POSIX (j espere...).
3 sept. 2004 à 19:53
Sinon, j'ai un copain qui cherches a porter ce logiciel, on peut le faire comment pour qu'il fonctionne sous windows ? (quelle idée aussi de vouloir faire du windows réseau... ^^)
3 sept. 2004 à 17:46
Sinon tout le code du serveur en lui meme est evidemment de moi, et en particulier la gestion des threads qui est le point que je voulais etudier en programmant ce serveur.
jom1012> Merci pour le code ca fait plaisir. Pour la liste des clients connectes c est tres simple, c est une commande qui est deja implementee dans le serveur. Si tu regarde bien c est la commande "/list". En fait toute les informations sur les clients sont contenus dans un tableau de pointeur sur une structure qui contient les infos sur le client, dont un champ pseudo (un char *) qui est le pseudo du client en question. Pour obtenir la liste des clients il suffit alors (cote serveur) de lire ces valeurs en parcourant le tableau (apres verrouillage de la structure par le mutex). Si tu veux rajouter des commandes c est tres simple. Il n y a qu une seule question a se poser : est ce que ma commande DOIT acceder (en lecture ou ecriture) au tableau des clients connectes? Si c est le cas il faut prendre le mutex AVANT de manipuler et le relacher APRES, en le gardant le moins de temps possible. D ailleurs le code peut etre ameliore en certains endroits car ceratines fonctions peuvent etre bloquantes sont appeles alors que le mutex est pris mais ce probleme n est pas tres grave. Si tu ne fais que toucher a me (la structure du client), il ne sert a rien de toucher au mutex.
Pour la realisation d un client en C/GTK je suis tout a fait pour, et je voulais le faire mais je ne connais pas le gtk et je n ai pas le temps pour me plonger dedant. Donc bien sur que tu as le droit de reprendre ce que j ai fait si tu mentionnes que le serveur original est de moi et que tu mets ce que tu as faut sur ce site.
Voila si tu as d autres questions je suis la pour y repondre.
3 sept. 2004 à 00:44
Par contre, je cherche comment envoyer une liste des clients connectés (je compte faire un client en gtk/c derriere ton serveur un peu modifié, si tu m'en donne l'autorisation bien sur !), si tu pouvais me mettre sur la piste ce serait génial, je n'y comprend pas grand chose en interactions entre threads et la maniere dont je peux trouver la liste de tous les users connectés...
Enfin voilà...
Si tu veux, je pourrais poster ici le code modifié du serv pour aller avec mon client ainsi que mon client (qui normalement sera portable sous windows) :)
Voili voilà, donc bah si tu pouvai me donner ton autorisation de continuer ce que je fais :) (la license n'etant pas indiquée... si c'est du gpl, n'hésite pas à me le dire lol ;))
Voilà ! En tout cas, très bon code, bravo !
Jonathan
2 sept. 2004 à 21:21
j'ai croisé une étrange ressemblance entre les deux codes présentés, évidement, le tien a des threads que le code du linux mag n'a pas, mais c'est les mêmes noms de variables, parfois les mêmes lignes...
bon, je ne suis pas capable de reprendre un code de linux mag pour y ajouterdes threads, mais par contre le repater si...
D'ou viennent ces ressemblances ?
28 août 2004 à 16:46
et oui, mandrake 10.0 mais avec kernel et compilateur recompiles et mis a jour
28 août 2004 à 12:57
Je croyais que xmms ne fonctionnait pas sur cet os ??? Bon, ça devait être spécifique a ma carte son lol...
Mais c'ets quoi ton pc pour survivre a 2 konqueror + xmms + 6 consoles dnas 1 terminal + un autre terminal + kwrite et tt ça dans un suel bureau .....? les 5 autres bureaux ont l'air d'être aussi pleins...
pas mal le système... j'ai esayé ton serveru sur un navigateur web... bon, ça marche pas, mais fallait s'y attendre, en telnet c'est parfait !
Se compile aussi bien sous mandrake 10.1
enfin voila j'ai mis 10/10