【发布时间】:2015-04-05 13:47:30
【问题描述】:
最近一直致力于创建 IRC 机器人,虽然它似乎可以连接并与大多数 IRC 服务器一起工作,但 Twitch IRC 服务器 (irc.twitch.tv) 似乎存在问题。
连接到另一台服务器时,可以毫无问题地接收和发送数据,但是使用 twitch 连接时,我无法发送或接收数据。
初始化:
Connection::Connection(char* server, int port, std::string nick, std::string pass)
{
fServer = server;
fPort = port;
fNick = nick;
fPass = pass;
fChanCount = 0;
clear_buffer();
fSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
cout << "Attempting to resolve host: " << fServer << endl;
fHost = resolve_host(fServer);
fSaddr.sin_addr.S_un.S_addr = fHost;
fSaddr.sin_port = htons(fPort);
fSaddr.sin_family = AF_INET;
cout << "Resolved to: " << fHost << endl;
}
打开连接:
int Connection::Connect()
{
if (connect(fSock, (sockaddr*)&fSaddr, sizeof(fSaddr)) == SOCKET_ERROR)
{
cout << "Can't connect to " << fServer << endl;
return 0;
}
recv(fSock, fBuffer, 1024 * 8, 0);
cout << fBuffer << endl << endl << flush;
send_message("PASS " + fPass);
send_message("NICK " + fNick);
send_message("USER " + fNick + " 0 * :" + fNick);
return 1;
}
清除缓冲区:
void Connection::clear_buffer()
{
memset(fBuffer, 0, sizeof(fBuffer));
}
接收:
string Connection::receive_message()
{
clear_buffer();
recv(fSock, fBuffer, 1024 * 8, 0);
return fBuffer;
}
完全不知道是什么原因造成的,如果需要可以提供更多细节。
【问题讨论】:
-
fPass是空的吗? IIRC 一些 IRC 服务器要求PASS包含某些内容,即使服务器不需要密码。在这种情况下,我已将“无”作为密码。 -
我通过密码的方式和其他的一样。
-
您使用的是真实密码还是 OAuth 令牌?