IRC客户端 - 没有回复JOIN

时间:2011-10-01 22:00:16

标签: c++ sockets irc sfml

我正在用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

1 个答案:

答案 0 :(得分:4)

它可能与c-string末尾的终止'\ 0'字符有关。尝试

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