Bonjour,
J'ai actuellement un problème avec mon bot, je fais une while infinie pour et dans celle ci je vide le buffer puis vérifie son contenu. Tout d'abord je vérifie si l'information renvoyée par le serveur est une requête de PING, dans ce cas là je lui répond en lui renvoyant la requête nécessaire. Et lorsque cette information n'est pas une requête de PING mais un PRIVMSG, je vérifie s'il contient un certains mot et suivant ce mot j'envoie une requête. Seulement lorsque j'envoie cette requête, Les prochaines réponses aux requêtes de PING sont altéré.. Il n'envoie plus ce qu'il envoyait avant qu'il détecte le mot. Exemple
-> N requête de ping
<- N réponse à cette requête
/* aucune erreur renvoyée */
-> N requête de ping
<- N réponse à cette requête
-> PRIVMSG contenant le mot que je veux détecter
<- envoie d'une requête
-> N requête de PING
<- N réponse à la requête
-> envoie d'un message d'erreur
Le message d'erreur ressemblant à:
Je ne vois pas pourquoi lorsque je détecte ce mot dans un PRIVMSG, toutes mes réponses aux requêtes de PING qui suivent se trouvent altérée.:serveur pseudo ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²PING :Unknown command
getTok(), est ma fonction qui me permet de parser les informations reçue par le serveur et renvoyant un const char *
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 int main() { WSADATA WSAData; WSAStartup(MAKEWORD(2,0), &WSAData); SOCKET sock; SOCKADDR_IN sin; char buffer[BUFSIZ]; char nick[] = "NICK squared\r\n", user[] = "USER socketz \"x.com\" \"irc.voila.fr\" :E equal MC squared\r\n", reply[] = "PONG :irc.voila.fr\r\n", join[] = "JOIN #help-scripting\r\n", version[]=""; sock = socket(AF_INET, SOCK_STREAM, 0); sin.sin_addr.s_addr = inet_addr("195.101.94.137"); sin.sin_family = AF_INET; sin.sin_port = htons(6667); connect(sock, (SOCKADDR *)&sin, sizeof(sin)); send(sock,user,strlen(user),0); send(sock,nick,strlen(nick),0); send(sock,join,strlen(join),0); while (1) { memset(buffer,'\0',BUFSIZ); recv(sock,buffer,BUFSIZ-1,0); if (buffer) { cout<<buffer<<endl; if (strstr(getTok(buffer,1,' '),"PING")) { send(sock,reply,strlen(reply),0); } else if (strstr(getTok(buffer,2,' '),"PRIVMSG")) { if (strstr(getTok(buffer,2,''),"VERSION")) { sprintf_s(version,BUFSIZ-1,"NOTICE %s :VERSION C.testing\r\n",getTok(getTok(buffer,1,'!'),2,':')); send(sock,version,strlen(version),0); } } } else { closesocket(sock); WSACleanup(); system("PAUSE"); break; } } return 0; }
J'espère que vous aurez la solution à mon problème, car je ne vois vraiment pas comment cela est possible..
Merci d'avance
Partager