[Debutant]Socket irc et communication bi-directionnelle
Salut a tous.
Je voulais faire un petit bot d'administration pour un chan sur irc, car tous ce que je trouve ne compile pas bien sur obsd. Et puis ca me fera peut etre comprendre le principe du socket.
Donc j'ai reussi en regardant par ci par la a ouvrir un socket, vers le serveur irc.
Mais je crois que ma methode n'est pas bonne lors de la communication avec le serveur.
En gros j'ai essayé avec un telnet et j'ai reussi a avoir une connexion, et meme a me mettre sur un chan.
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
$telnet x.x.x.x 6667
(2 ligne de blabla du serveur)
USER OJ . . :monnom
NICK LULU
(le serveur renvoi :
PING :xxxxxxx
ou xxxxx est un chiffre a lui retourner)
PONG xxxxxxx
(a ce stade, je suis enregistrer et je peu faire:)
JOIN #test
PRIVMSG #test :Salut tt le monde |
Bref, ca c'est en telnet. Mais en C je ne comprend pas comment enchainer lecture et ecriture sur le socket.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| int initsrv(int sock){
char buffer[LG_BUFFER];
int nb_lus;
char *user="LuLu . . :OJ\r\n";
char *nick="LuLuLeBot\r\n";
videsocket(sock);
//videsocket(sock);
if(write(sock,user,strlen(user))<0){
perror("Erreur Enregistrement Usr\n");
return(-1);
}
if(write(sock,nick,strlen(nick))<0){
perror("Erreur Enregistrement Nick\n");
return(-1);
}
if((nb_lus=read(sock,buffer,LG_BUFFER))<0){
perror("Erreur Ping serveur\n");
return(-1);
}
//printf("Reponse ping%s\n",buffer);
write(STDOUT,buffer,LG_BUFFER);
printf("\n");
return(0);
} |
La fonction videsocket(int socket) lit sur le socket 1024 caractère.
Donc ca m'affiche les 2 lignes de blabla et puis plus rien, le programme bloque sur le dernier read de initserveur().
Voila, voila. Jespere avoir été complet.
Si quelqu'un a une idee, ou un bon tutorial...
Merci davance a ceux qui prendront le tps de lire ca.
A bientot