IRC клиент - нет ответа на JOIN - PullRequest
       4

IRC клиент - нет ответа на JOIN

2 голосов
/ 02 октября 2011

Я пишу IRC-клиент на C ++ (с помощью библиотеки SFML), но он ведет себя странно.Я посылаю команды NICK и USER и могу подключиться к серверу, но в команде JOIN происходит много странных вещей, которые мне нужно написать «Случайный код, который волшебным образом работает», чтобы решить.Я почти уверен, что команды также придерживаются IRC RFC.

Я знаю, что сокеты отправляют то, что они должны отправлять, и я проверил это с помощью Wireshark, поэтому я публикую здесь сообщение о пакете.В следующих примерах сокет уже подключен к IRC-серверу (в данном случае это irc.freenode.net)

Это работает:

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

Это не так:

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

Но, как ни странно, это работает:

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

Я провел некоторое исследование по этой теме, и, похоже, ни у кого нет такой проблемы.Странно, что, когда я попробовал это в telnet, мне нужно было отправить JOIN только один раз.Кто-нибудь может дать мне совет?

Спасибо, SFI

1 Ответ

4 голосов
/ 02 октября 2011

Это может быть связано с завершающим символом '\ 0' в конце c-строки.Попробуйте

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