【发布时间】:2011-10-01 22:00:16
【问题描述】:
我正在用 C++ 编写一个 IRC 客户端(在 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
【问题讨论】: