2014-03-18 27 views
-1

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

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

片段代码:

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; 
} 
+0

你为什么要发送.size()+ 1?对于USER和NICK,它看起来并不像在每行之后发送\ r \ n。 – Boofhead

+0

我之前纠正过它,但它仍然不起作用 – user3434747

+0

看起来您的编辑仍然发送发送size()+ 1的错误。你再次没有添加\ r \ n到每个。根据RFC,每行应该被正确终止。 – Boofhead

回答

0

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

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

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

0

你有三个问题:

  1. 你做阻塞读取,这将永远等待,如果没有什么阅读。

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

  3. 你不想发送终止零字节。