问候。我刚刚开始使用 boost::asio 库,并且遇到了一些与 boost::asio::ip::tcp::iostream 相关的早期困难。
我的问题有两个部分:
1.) 如何仅使用主机和端口号连接 iostream?
我可以使客户端和服务器[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()。这是这样做的方法,还是有其他方法。
对其中一项或两项的建议将不胜感激。另外,如果我忽略了相关的文档和/或示例,那就太好了。到目前为止,我还无法通过阅读图书馆文档或搜索“网络”来回答这些问题。