[C] bot irc
|
24-09-2012, 19h41
(Modification du message : 19-11-2012, 19h28 par InstinctHack.)
Message : #1
|
|
Creepy_p0ney
chef des poneys voodoo Messages : 146 Sujets : 9 Points: 24 Inscription : Dec 2011 |
[C] bot irc
voilà comme certains auront pu le remarquer sur l'irc, j'ai créer un bot, mais il a un certain bug c'est qu'il affiche plusieurs fois la même chose (le dernier message qu'il a envoyé). Mais je pense savoir pourquoi, mais je sais pas comment y remedier voici mon code :
Code : #include <stdio.h> Code : recv(sockfd,buf,256,0);
Penser que coder est coder explique-t-il la recursion ?
http://p0neyland.wordpress.com/ |
|
24-09-2012, 22h09
Message : #2
|
|
ark
Psyckomodo! Messages : 1,033 Sujets : 48 Points: 317 Inscription : Sep 2011 |
RE: [c bot] probleme bot en c
Hum, j'aurais tendance a essayer d’écrire un \0 au tout début du buffer après l'avoir print, mais pas sur que ça marche.
|
|
24-09-2012, 22h54
Message : #3
|
|
b0fh
Membre actif Messages : 210 Sujets : 17 Points: 309 Inscription : Jul 2012 |
RE: [c bot] probleme bot en c
Hello,
Le problème est probablement que recv(2) travaille sur des données arbitraires et ne rajoute donc pas le terminateur nul à la fin d'une ligne. Quand un message plus court que le précédent est reçu, il est réécrit par dessus, et strstr ne voit pas la limite entre les deux. Code : read_bytes = recv(sockfd, buf, 255, 0); Note le 255 pour éviter une erreur off-by-one. Ce code n'est pas fiable parce qu'il n'y a aucune garantie qu'une ligne entière soit disponible après un appel à recv(2), meme si ça sera le cas quasiment tout le temps. Pour faire proprement tu devrais avoir une première boucle qui accumule les résultats des appels à recv dans un buffer intermédiaire, cherche les terminateurs \n et déclenche une action le cas échéant, et copie le reste du buffer éventuel au début. Ton implémentation de PING/PONG est incomplète, le PONG est sensé retourner l'argument envoyé avec PING. Le serveur serait en droit de te déconnecter pour ça. Dernièrement, pour tes chaines de caractère constantes, Code : char blah[100] = "foobarbaz"; Code : char blah[] = "foobarbaz"; Code : char *blah = "foobarbaz"; |
|
« Sujet précédent | Sujet suivant »
|
Utilisateur(s) parcourant ce sujet : 3 visiteur(s)