簡體   English   中英

如何使用boost :: asio :: ip :: tcp :: resolver處理本地和公共ip

[英]how to handle local and public ip using boost::asio::ip::tcp::resolver

我有以下3 eth如下:

eth0      inet addr:10.105.159.146  Bcast:10.105.159.255  Mask:255.255.254.0
          inet6 addr: fe80::a00:27ff:fe11:84e1/64           

eth1      inet addr:192.168.56.102  Bcast:192.168.56.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe5e:8a5c/64          

lo        inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host

這是我的代碼如下:

server::server(const std::string& address, const std::string& port): io_service_(),
            signals_(io_service_),
            acceptor_(io_service_)
        {

            signals_.add(SIGINT);
            signals_.add(SIGTERM);
           #if defined(SIGQUIT)
            signals_.add(SIGQUIT);
           #endif // defined(SIGQUIT)
            signals_.async_wait(boost::bind(&server::handle_stop, this));

            boost::asio::ip::tcp::resolver resolver(io_service_);            
            boost::asio::ip::tcp::resolver::query query(address, port);
            boost::asio::ip::tcp::endpoint endpoint = *resolver.resolve(query);

            acceptor_.open(endpoint.protocol());
            acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
            acceptor_.bind(endpoint);
            acceptor_.listen();
            start_accept();
        }

我應該傳遞什么地址

boost::asio::ip::tcp::resolver::query query(**address**, port); 

這樣客戶端可以使用192.168.56.102或10.105.159.146這兩個IP進行連接

目前,如果我以

server s("127.0.0.1", "1025");       //lo
server s("192.168.56.102", "1025"); //eth1
server s("10.105.159.146", "1025"); //eth0

這些都屬於同一台機器,因此我應該如何運行服務器或可以進行哪些更改,以便上面的任何IP請求都可以從客戶端訪問它。

將地址設置為“ 0.0.0.0”以接受所有IPV4地址。 或者您可以簡單地替換為:

boost::asio::ip::tcp::resolver resolver(io_service_);            
boost::asio::ip::tcp::resolver::query query(address, port);
boost::asio::ip::tcp::endpoint endpoint = *resolver.resolve(query);

有:

boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), port);

請注意,在上面的行中,port是一個unsigned short而不是string

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM