asio boost 套接字连接被拒绝
asio boost socket connection refused
我正在尝试通过 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)
首先,所有不卫生的命名空间......滥用,然后甚至命名你的变量名称冲突(如 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。
不出所料,这行得通(请参阅 在 Coliru 上使用组合源)。
现在,如果它不适合你,那么:
- 也许你不是运行你认为的代码(检查构建是否是最新的)
- 也许您 运行 在 virtualized/isolated 环境中(比如 docker 容器?)
- 客户端启动时having/keeping服务器运行可能实际上不是
- 可能存在 permission/firewall 问题
- 可能有一个错误的假设(例如,如果您没有意识到服务器在单次连接或网络配置更改后退出,例如)
我正在尝试通过 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)
首先,所有不卫生的命名空间......滥用,然后甚至命名你的变量名称冲突(如 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。
不出所料,这行得通(请参阅 在 Coliru 上使用组合源)。
现在,如果它不适合你,那么:
- 也许你不是运行你认为的代码(检查构建是否是最新的)
- 也许您 运行 在 virtualized/isolated 环境中(比如 docker 容器?)
- 客户端启动时having/keeping服务器运行可能实际上不是
- 可能存在 permission/firewall 问题
- 可能有一个错误的假设(例如,如果您没有意识到服务器在单次连接或网络配置更改后退出,例如)