2011-10-01 1 views
2

J'écris un client IRC en C++ (avec l'aide de la bibliothèque SFML), mais il se comporte bizarrement. J'envoie les commandes NICK et USER et je peux me connecter au serveur, mais la commande JOIN a beaucoup de choses étranges qui se passent que je dois écrire "Le code aléatoire qui fonctionne magiquement" pour résoudre. Je suis assez sûr que les commandes adhèrent à la RFC IRC ainsi.Client IRC - Pas de réponse sur JOIN

Je sais que les sockets envoient ce qu'ils sont censés envoyer et je l'ai vérifié avec Wireshark, ce que je poste ici est ce que le message du paquet est. Dans les exemples qui suivent la prise est déjà connecté au serveur IRC (qui dans ce cas est irc.freenode.net)

Cela fonctionne:

char mess[] ="NICK lmno \n\rUSER lmno 0 * :lmno\n\rJOIN #mytest\n\r"; 
Socket.Send(mess, sizeof(mess)); 

Cela ne signifie pas:

char msg[] = "NICK lmno \r\nUSER lmno 0 * :lmno \r\n"; 
char msga[] = "JOIN #mytest \r\n"; 
Socket.Send(msg, sizeof(msg)); 
Socket.Send(msga, sizeof(msga)); 

mais curieusement cela fonctionne:

char msg[] = "NICK lmno \r\nUSER lmno 0 * :lmno \r\n"; 
char msga[] = "JOIN #mytest \r\n"; 
Socket.Send(msg, sizeof(msg)); 
Socket.Send(msga, sizeof(msga)); 
Socket.Send(msga, sizeof(msga)); 

J'ai fait des recherches sur ce sujet et personne ne semble avoir le sa moi problème. Stranger est que lorsque j'ai essayé cela dans telnet, je n'ai qu'à envoyer JOIN une fois. Quelqu'un peut-il me donner des conseils?

Merci, SFI

Répondre

4

Il pourrait avoir à faire avec la terminaison '\ 0' à la fin d'un c-string. Essayez

Socket.Send(msg, sizeof(msg) - 1); 
Socket.Send(msga, sizeof(msga) - 1); 
+1

Ah, merci! Je l'ai eu sur toutes les instructions sauf une. Merci beaucoup – SFI

+1

Utilisez 'strlen()' au lieu de 'sizeof() - 1'. –