IRCサーバー(twitch.tv)に接続しようとしています。接続は成功しましたが、私はどのようにしてをのサーバーから正しく読み取るかわかりません。具体的には、私はこの行に問題があります:boost::asio::read(s, boost::asio::buffer(reply, MAX_LENGTH));
。boost :: asio読み取り応答
応答メッセージのサイズよりも大きい番号のMAX_LENGTH
(1024)を使用すると、プログラムは終了していないようです。私が64のような数字を使うと、私は64文字しか読むことができません。何とか\r\n
か何かまで読むことができますか?どのようにこれを正しく行うことができますか?
#include <boost/asio.hpp>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
try
{
char HOSTNAME[] = "irc.chat.twitch.tv";
char PORT[] = "6667";
char PASS[] = "PASS oauth:123\r\n";
char NICK[] = "NICK 123\r\n";
char USER[] = "USER 123\r\n";
const size_t MAX_LENGTH = 1024;
boost::asio::io_service io_service;
boost::asio::ip::tcp::socket s(io_service);
boost::asio::ip::tcp::resolver resolver(io_service);
boost::asio::connect(s, resolver.resolve({HOSTNAME, PORT}));
cout << "connected\n";
boost::asio::write(s, boost::asio::buffer(PASS, strlen(PASS)));
boost::asio::write(s, boost::asio::buffer(NICK, strlen(NICK)));
boost::asio::write(s, boost::asio::buffer(USER, strlen(USER)));
cout << "sent 3 messages\n";
char reply[MAX_LENGTH];
size_t reply_length = boost::asio::read(s,
boost::asio::buffer(reply, MAX_LENGTH));
// execution never reaches here
std::cout << "Reply is: ";
std::cout.write(reply, reply_length);
std::cout << "\n";
}
catch (std::exception &e)
{
std::cerr << "Exception: " << e.what() << "\n";
}
return 0;
}
は 'read_some'を使用してください。バッファがいっぱいになるまで 'read'ブロックします。 –