Ich versuche, eine Verbindung zu einem IRC-Server (twitch.tv) herzustellen. Die Verbindung ist erfolgreich, aber ich weiß nicht, wie die Antwort vom Server richtig lesen. Genauer gesagt habe ich Probleme in dieser Zeile: boost::asio::read(s, boost::asio::buffer(reply, MAX_LENGTH));
.boost :: asio Antwort lesen
Wenn ich MAX_LENGTH
(1024), die eine Zahl größer als die Größe der Antwort Nachricht ist, dann scheint das Programm nicht zu beenden. Wenn ich eine Nummer wie 64 verwende, kann ich nur 64 Zeichen der Nachricht lesen. Kann ich irgendwie bis \r\n
oder so etwas lesen? Wie kann ich das richtig machen?
#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;
}
Verwenden 'read_some'. 'Blöcke 'lesen, bis der Puffer voll ist. –