6

2 つのプログラムが相互に通信する学校用のプログラムを作成しています。これまでのところ、2 つのプログラムを接続できませんでした。localhost:8888 または 127.0.0.1:8888 に接続しようとすると、「ホストが見つかりません (権限のある)」というエラーが発生します。

これまでのところ、私のコードは次のとおりです。

接続.cpp

Connection::Connection(std::string Arg) {
    try
    {
        tcp::resolver resolver(io_service);
        cout<<Arg<<endl;
        tcp::resolver::query query(Arg, "daytime");
        tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
        tcp::resolver::iterator end;

        tcp::socket socket(io_service);
        socket_p = &socket;
        boost::system::error_code error = boost::asio::error::host_not_found;
        while (error && endpoint_iterator != end)
        {
           socket.close();
           socket.connect(*endpoint_iterator++, error);
        }
        if (error)
           throw boost::system::system_error(error);
    }
    catch (std::exception& e)
    {
        std::cerr << e.what() << std::endl;
    }
}
void Connection::Receiver() {
    try{
        for (;;)
        {
            boost::array<char, 128> buf;
            boost::system::error_code error;

            size_t len = socket_p->read_some(boost::asio::buffer(buf), error);

            if (error == boost::asio::error::eof)
                break; // Connection closed cleanly by peer.
            else if (error)
                throw boost::system::system_error(error); // Some other error.

            std::cout.write(buf.data(), len);
        }
    }
    catch (std::exception& e)
    {
        std::cerr << e.what() << std::endl;
    }
} 

これが役立つ場合は、fedora を使用します。

編集: 完全なコードはここにあります : http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio/tutorial/tutdaytime1.htmlよくできた)

4

1 に答える 1

6

以下を使用する必要があります。

tcp::resolver::query query(host, PORT, boost::asio::ip::resolver_query_base::numeric_service);

問題は、query のコンストラクターにデフォルトで設定された address_configured フラグがあり、ループバック デバイスがアドレスを持つ唯一のデバイスである場合、アドレスを返さないことでした。flags を 0 または address_configured 以外に設定するだけで問題は解決します。

Boost Asio のホスト名解決は Linux でどのように機能しますか? NSSを使用することは可能ですか?

コード全体を貼り付けていただけると助かります。最初に、非常に便利なコードがここにあります。

http://boost.2283326.n4.nabble.com/Simple-telnet-client-demonstration-with-boost-asio-asynchronous-IO-td2583017.html

動作し、ローカル telnet でテストできます。

于 2012-09-22T09:38:06.523 に答える