我正在用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
答案 0 :(得分:4)
它可能与c-string末尾的终止'\ 0'字符有关。尝试
Socket.Send(msg, sizeof(msg) - 1);
Socket.Send(msga, sizeof(msga) - 1);