Привет. Я только начинаю работать с библиотекой boost :: asio и столкнулся с некоторыми ранними трудностями, связанными с boost :: asio :: ip :: tcp :: iostream.
Мой вопрос состоит из двух частей:
1.) Как подключить iostream, используя просто номер хоста и порта?
Я могу заставить примеры client и server [boost.org] нормально работать как закодированные. Сервер указывает порт явно:
boost::asio::io_service io_service;
tcp::endpoint endpoint(tcp::v4(), 13);
tcp::acceptor acceptor(io_service, endpoint);
Порт 13 является хорошо известным портом для "дневной" службы.
Пример клиента подключается, указав хост и имя службы:
tcp::iostream s(argv[1], "daytime");
Для моего собственного приложения я хотел бы установить сервер на произвольный порт и подключиться по номеру, как показано ниже:
Сервер:
boost::asio::io_service io_service;
tcp::endpoint endpoint(tcp::v4(), port);
tcp::acceptor acceptor(io_service, endpoint);
acceptor.accept(*this->socketStream.rdbuf());
...
Клиент:
boost::asio::ip::tcp::iostream sockStream;
...
sockStream.connect("localhost", port);
...
Если в клиенте я пытаюсь указать номер порта напрямую (вместо службы по имени), поток не может подключиться. Есть ли способ сделать это? Мне не ясно, какие аргументы для подключения могут / должны быть.
2.) Какой предпочтительный способ проверить успешность вызова iostream :: connect?
Функция возвращает void, и исключение не выдается. Единственный метод, который я разработал, - это тестирование stream.fail () и / или stream.good (). Это способ сделать это, или есть какой-то другой метод.
Буду признателен за консультацию по одному или обоим из них. Кроме того, если я пропущу соответствующую документацию и / или примеры, это было бы неплохо. До сих пор я не смог ответить на эти вопросы, читая документы по библиотеке или выполняя поиск в сети.