【问题标题】:IRC client - No reply on JOINIRC 客户端 - 加入时没有回复
【发布时间】: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

【问题讨论】:

    标签: c++ sockets irc sfml


    【解决方案1】:

    这可能与 c 字符串末尾的终止字符“\0”有关。试试

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

    【讨论】:

    • 啊,谢谢!除了一个发送语句之外,我确实在所有其他语句中都有它。非常感谢
    • 使用strlen() 而不是sizeof()-1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多