asio boost 套接字连接被拒绝

时间:2021-05-06 21:11:38

标签: c++ sockets boost-asio

我正在尝试通过 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));
}

server.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)

1 个答案:

答案 0 :(得分:0)

首先,由于所有不卫生的命名空间......滥用,然后甚至命名您的变量名称冲突(如 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

不出所料,这很有效(请参阅 thatColiru 上使用综合来源直播)。

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

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