提升 ASIO TCP 服务器
boost asio tcp server
我目前正在尝试boost。当我尝试制作一个简单的多线程回显服务器时,它会在收到错误代码 3 时退出。我已经多次查看了文档,但仍然没有运气。我知道这可能是我忽略的非常简单的事情。我对 winsock 有不错的经验,但我想学习提升库。
这是我取出的失败代码
typedef boost::shared_ptr<tcp::socket> socket_ptr;
boost::asio::io_service io;
boost::array<char, 512> buf;
void startserver ( std::string host, std::string port )
{
tcp::acceptor a (io, tcp::endpoint(tcp::v4(), atoi(port.c_str())));
for(;;)
{
socket_ptr sock (new tcp::socket(io));
a.accept(*sock);
std::cout << sock->remote_endpoint() << std::endl;
boost::thread t (boost::bind(session, sock));
}
}
void session ( socket_ptr sock )
{
sock->send(boost::asio::buffer("welcome"),0,er);
size_t len;
for(;;)
{
len = sock->receive(boost::asio::buffer(buf));
sock->send(boost::asio::buffer(buf,len),0,er);
}
}
我可以使用netcat很好地连接到它,它会收到欢迎消息,但是当它收到它时,它会崩溃。我尝试在每个系统上使用 boost::system::error_code 捕获错误,但没有任何返回
问题太多了。查看 asio 文档以获取正确的示例。一些问题:
- 创建
boost::thread
对象t
,然后立即退出作用域。这断开了线程,现在无法控制;或者,如前所述,Joachim Pileborg可以终止(我不太熟悉boost::threads,所以如果我错了,请纠正我)。 - 在此之后,您开始新的接受器。每个侦听端口应仅保留 1 个接收器。 为此
- 创建线程根本没有意义,它是 ASIO,使用异步;)
-
receive
不等待数据,它只是获取 ASIO 已经拥有的数据包数据(在这种情况下并非如此)
在提升站点查看示例,我认为您的情况正在阻止TCP echo服务器
这很可能是因为线程超出了范围。从boost::thread
析构函数的手册页:
如果线程是可连接的,则调用 std::endinate。破坏*这个。
这意味着当线程启动时,它可能会运行一段时间,然后 startserver
中的线程再次获得控制权,线程对象被破坏并且线程被终止。
相关文章:
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 提升 Asio TCP 服务器 处理多个客户端
- 计算出有多少客户端可以连接到我正在使用的一些tcp服务器代码
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- 如何将 c++ 中的客户端 TCP 的替身列表发送到 Matlab 中的 TCP 服务器?
- 从 tcp 服务器打开 8MP H264 流时出现问题
- TCP C++客户端从C#服务器接收字节数组
- TCP套接字(客户端-服务器)recv()返回-1值
- 通过TCP将数据从C++客户端发送到JSON服务器
- 仅通过建立一次TCP连接将Recv从客户端发送到服务器套接字
- Qt TCP服务器不从客户端读取数据
- C++ TCP 服务器比较字符串失败
- 提升 ASIO TCP 服务器架构
- 如何让客户端通过modbus-tcp协议与多个服务器通信?
- C# 客户端到C++服务器 Tcp 套接字连接错误
- 连接后连接丢失 ->服务器 TCP 提升。亚西奥
- 使用qt的多客户端/服务器TCP应用程序
- C++客户端到Java服务器(TCP/IP)
- 简单的客户机/服务器TCP c++
- 多客户端一服务器TCP c++