【问题标题】:asio boost socket connection refusedasio boost套接字连接被拒绝
【发布时间】:2021-07-29 05:37:39
【问题描述】:

我正在尝试通过 asio boost 连接客户端和服务器,但我的连接一直被拒绝。我的预期输出是没有错误的干净连接。

client.cpp

#include <boost/asio.hpp>
#include <fstream>
#include <iostream>

using namespace std;
using namespace boost;
using namespace boost::asio;
using namespace boost::asio::ip;
using ip::tcp;

int main()
{
    io_service io_service;
    ip::tcp::socket client_socket(io_service);
    client_socket.connect(
        tcp::endpoint(address::from_string("127.0.0.1"), 1234));
}

服务器.cpp

#include <boost/asio.hpp>
#include <fstream>
#include <iostream>

using namespace std;
using namespace boost;
using namespace boost::asio;
using namespace boost::asio::ip;
using ip::tcp;

int main() {
    io_service io_service;

    tcp::acceptor acceptor_server(
        io_service, tcp::endpoint(address ::from_string("127.0.0.1"), 1234));

    ip::tcp::socket server_socket(io_service);

    acceptor_server.accept(server_socket);
}

这是我的错误信息:

terminate called after throwing an instance of                                                       
      'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >'
  what():  connect: Connection refused
  Aborted (core dumped)

【问题讨论】:

    标签: c++ sockets boost-asio


    【解决方案1】:

    首先,所有不卫生的命名空间......滥用,然后甚至命名您的变量名称冲突(如io_context),很难判断代码是否正确,甚至应该编译。

    这是我的还价

    • 文件server.cpp

       #include <boost/asio.hpp>
       using boost::asio::ip::tcp;
      
       int main() {
           boost::asio::io_service ctx;
      
           tcp::acceptor s(ctx, tcp::endpoint({}, 1234));
           tcp::socket conn = s.accept();
       }
      
    • 文件client.cpp

       #include <boost/asio.hpp>
       using boost::asio::ip::tcp;
      
       int main() {
           boost::asio::io_service ctx;
           tcp::socket s(ctx);
           s.connect(tcp::endpoint({}, 1234));
       }
      

    见他们Live On Compiler Explorer。

    不出所料,这很有效(请参阅 that 在Coliru 上直播并结合来源)。

    现在,如果它不适合你,那么:

    • 也许您没有运行您认为的代码(检查构建是否是最新的)
    • 也许您正在虚拟化/隔离环境中运行(例如 docker 容器?)
    • 也许您实际上在客户端启动时没有/保持服务器运行
    • 可能存在权限/防火墙问题
    • 可能存在不正确的假设(例如,如果您没有意识到服务器在单次连接或网络配置更改后退出)

    【讨论】:

      猜你喜欢
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多