Server irc en c (protocole 'maison')

Soyez le premier à donner votre avis sur cette source.

Vue 10 075 fois - Téléchargée 1 081 fois

Description

Ceci est un serveur IRC, mais ne s'appuyant pas sur la vraie RFC de l'IRC.
Ce programme permet en fait de créer plusieurs serveurs, qui pourront créer plusieurs groupes de discussions, où pourront dialoguer plusieurs utilisateurs.

Les notions de droits (opérateur / administrateur, etc) ont été gérées de manière simple, et il est possible de faire des kick / ban, des whois, etc.
Commande qui ne sert à rien : vous pouvez demander à une vache en Ascii-art de prononcer votre message pour vous, avec un "/cowsay" :)

Au niveau interne : un thread par serveur, chaque serveur écoutant les connexions grâce à un "poll".

Le sujet complet du projet peut être trouvé ici :
http://igm.univ-mlv.fr/~duris/RESEAU/JAVA/IR2/projetIR2JavaReseau20052006.html

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
19
Date d'inscription
vendredi 22 février 2002
Statut
Membre
Dernière intervention
13 décembre 2006

Bonjour, vous aurez du mal à dialoguer avec un "client officiel", puisque le serveur fourni ici ne respecte pas du tout (mais alors pas du tout du tout) la RFC... il a juste été réalisé pour voir comment faire des connexions clients / serveurs, etc.

Pour le tester sur un même machine, il suffit de lancer le serveur dans une console, et de faire un netcat dans une autre...
Messages postés
1
Date d'inscription
dimanche 31 décembre 2006
Statut
Membre
Dernière intervention
1 février 2010

Bonjour,
Comment puis-je faire pour tester ce serveur IRC sur une même machine (ubuntu sur vmware) avec un client IRC "officiel" (xchat pour ne pas le citer)?
Merci par avance,
Jerome
Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014

ok merci de cette explication :)
Messages postés
19
Date d'inscription
vendredi 22 février 2002
Statut
Membre
Dernière intervention
13 décembre 2006

Pour le poll, regarde la fonction 'Server_listen()' du fichier 'server.c'. Normalement, il y a pas mal de commentaires.

Le principe utilisé est le suivant :
- on crée un tableau de structures 'pollfd' (poll file descriptor ?), de la taille du nombre maximal de personnes acceptées
- on initialise tous les file descriptors dedans à '-1' (non utilisé)
- lorsqu'un client se connectera, on recherchera une case dont le fd est à -1, et on l'associe au client
- s'il n'y a plus d'élément non utilisé, c'est que le serveur est plein.

Il y a ensuite 2 sortes d'actions à gérer avec le poll :
1) le serveur reçoit une demande de connexion
2) un client envoie des informations au serveur

Il faut dont en théorie 2 'poll', 1 qui écoute uniquement le serveur, et un qui écoute tous les clients pour voir si quelqu'un demande quelque chose.

Pour éviter ça, on colle le file descriptor du serveur au début du tableau. Comme ça, on ne fait plus qu'un seul poll qui écoute le serveur et les clients en même temps.

Du coup, quand on parcourt le tableau pour savoir qui a quelque chose de nouveau à faire, on traite différement la case 0 et les autres. Si c'est la case 0, c'est que le serveur vient de recevoir une demande de connexion. Si c'est une autre case, c'est un client qui veut envoyer un message.

Je crois que c'est à peu près tout. Ah non : pour détecter qu'il y a quelque chose à faire pour un file descriptor donné, il suffit de faire un :
if(polls[i].fd != -1 && polls[i].revents & POLLIN) { ... }

"Est-ce qu'il y a bien un client dans cette case, et est-ce qu'il y a un truc à lire"
Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
2
franchement personne peut t'en vouloir de pas respecter la rfc. Je pense que la rfc irc est la plus pourfendue, coté client comme coté server :)
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.