WinSocket IRC USER命令

时间:2014-03-18 19:44:01

标签: c++ irc winsock2

当我通过telnet连接到IRC服务器时,一切正常,但在我的程序中,问候消息后服务器没有响应。怎么了?

当我发送“JOIN #channel”服务器响应时,PS。

代码片段:

while (true)
{
    ret = recv(pocket, buf, 512, 0);
    if (ret == 0 || ret == SOCKET_ERROR)
    {
        printf("Serwer przerwal polaczenie");
        break;
    }
    buf[ret] = '\0';
    input = buf;
    printf("%s\n", input.c_str());
    if (fTime)
    {
        isend(pocket, "USER foox 0 0 :foox");
        isend(pocket, "NICK foobar");
        fTime = false;
    }
    memset(buf, 0, sizeof(buf));
}

isend功能:

bool isend(SOCKET socket,std::string message)
{
        int ret = send(socket, message.c_str(), message.size() + 1, 0);
        if (!ret){
        printf("Nie udalo sie wyslac pakietu: \"%s\"", message);
        return false;
    }
    else
        return true;
}

2 个答案:

答案 0 :(得分:0)

请勿在连接时阅读。根据RFC 2812发送NICK和USER信息。您按照建议的相反顺序执行此操作。 NICK和USER行都需要用\ r \ n正确终止,然后你才能阅读。

不要发送message.size()+ 1 - 发送message.size()。我不明白为什么你发送message.size()+ 1而你在我的评论中没有回答为什么。

如果您遇到困难,我建议使用Wireshark之​​类的未加密连接,并记录IRC客户端如何管理它。

答案 1 :(得分:0)

你有三个问题:

  1. 你进行阻止读取,如果没有什么可读的话,它会永远等待。

  2. 您需要在每一行之后发送回车和换行符。

  3. 您不希望发送终止零字节。