当我通过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;
}
答案 0 :(得分:0)
请勿在连接时阅读。根据RFC 2812发送NICK和USER信息。您按照建议的相反顺序执行此操作。 NICK和USER行都需要用\ r \ n正确终止,然后你才能阅读。
不要发送message.size()+ 1 - 发送message.size()。我不明白为什么你发送message.size()+ 1而你在我的评论中没有回答为什么。
如果您遇到困难,我建议使用Wireshark之类的未加密连接,并记录IRC客户端如何管理它。
答案 1 :(得分:0)
你有三个问题:
你进行阻止读取,如果没有什么可读的话,它会永远等待。
您需要在每一行之后发送回车和换行符。
您不希望发送终止零字节。