正在打开具有零填充IP字符串的升压套接字

Opening a boost socket with zero padding IP string

本文关键字:字符串 IP 套接字 填充      更新时间:2023-10-16

我使用的是boost 1.53,打开套接字的代码如下:

void openConnection(std::string ip, std::string port)
{
   tcp::resolver resolver_( m_ioService );
   tcp::resolver::query query(boost::asio::ip::tcp::v4(), ip, port);
   tcp::resolver::iterator iterator = resolver_.resolve(query);
   boost::shared_ptr<tcp::socket> socket_(new tcp::socket(m_ioService));
   boost::asio::connect(*socket_, iterator);
   m_tcpSocket = socket_;
}

如果我使用ip="192.168.2.50",我很好,但如果我使用"192.168.002.050",我无法打开连接。

有没有任何方法可以为此类字符串调整tcp::resolver::query对象?

如果192.168.002.50确实有效,我会说这是一次失败的八进制解码尝试(这不应该发生)。

否则,它似乎是boost::asio::ip::address_v::from_string中的一个限制。毫无疑问,这将有合理的理由(我没有记住RFC)。

您总是可以手动解析,并使用采用八位字节的构造函数:

  address_v4(address_v4::bytes_type {192,168,2,50});
  • http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/reference/ip__address_v4.html