begin process at 2008 09 06 19:29:30
1 237 931 membres
313 nouveaux aujourd'hui
14 314 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SERVER IRC EN C (PROTOCOLE 'MAISON')


Information sur la source

Catégorie :Réseaux & Internet Classé sous : irc, poll, cowsay, protocole, serveur Niveau : Initié Date de création : 18/03/2006 Vu / téléchargé: 3 789 / 483

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

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
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

  • signaler à un administrateur
    Commentaire de max12 le 19/03/2006 04:59:20 administrateur CS

    Salut, tu voudrais m'expliquer un peu le concept de "poll" ?

  • signaler à un administrateur
    Commentaire de Alain Proviste le 19/03/2006 05:16:17 administrateur CS

    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 :)

  • signaler à un administrateur
    Commentaire de Worst le 19/03/2006 12:48:00

    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"

  • signaler à un administrateur
    Commentaire de max12 le 19/03/2006 17:53:47 administrateur CS

    ok merci de cette explication :)

Ajouter un commentaire