Я пишу 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