![](/img/trans.png)
[英]boost::asio::ip::tcp::socket - How to bind to a specific local port
[英]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.