标签:
杂谈 |
由于asio服务端需要在一个线程中启动异步操作,即一个死循环等待socket事件,因此需要创建一个线程,这里使用QT的线程支持即可.创建QThread的子类,重写其run()虚函数,在里面调用io_service::run();在将asio自带的tcp异步echo服务代码全部移植过来,测试通过.
//asiotcpserverthread.h头文件,其中声明了线程类及从控制台范例中移植过来的类
#ifndef ASIOTCPSERVERTHREAD
#define ASIOTCPSERVERTHREAD
//asio
#include
<boost/asio/buffer.hpp>
#include
<boost/asio/io_service.hpp>
#include
<boost/asio/ip/address.hpp>
#include
<boost/asio/ip/address_v4.hpp>
#include
<boost/asio/ip/address_v6.hpp>
#include
<boost/asio/ip/basic_endpoint.hpp>
#include
<boost/asio/ip/basic_resolver.hpp>
#include
<boost/asio/ip/basic_resolver_entry.hpp>
#include
<boost/asio/ip/basic_resolver_iterator.hpp>
#include
<boost/asio/ip/basic_resolver_query.hpp>
#include
<boost/asio/ip/host_name.hpp>
#include
<boost/asio/ip/tcp.hpp>
#include
<boost/asio/write.hpp>
#include
<boost/asio/read.hpp>
#include
<boost/asio/impl/connect.hpp>
#include
<boost/asio/read_until.hpp>
#include
<boost/asio/streambuf.hpp>
#include <boost/bind.hpp>
#include
<boost/asio/placeholders.hpp>
//qt
#include <QThread>
using boost::asio::ip::tcp;
class AsioTcpServerThread : public QThread
{
public:
protected:
};
class session
{
public:
private:
};
class server
{
public:
private:
};
const int port = 10800;
#endif
//asiotcpserverthread.cpp
#include "asiotcpserverthread.h"
AsioTcpServerThread::AsioTcpServerThread()
{
}
AsioTcpServerThread::~AsioTcpServerThread()
{
}
void AsioTcpServerThread::run()
{
}
session::session(boost::asio::io_service&
io_service) : socket_(io_service)
{
}
tcp::socket& session::socket()
{
}
void session::start()
{
}
void session::handle_read(const
boost::system::error_code& error, size_t
bytes_transferred)
{
}
void session::handle_write(const boost::system::error_code
&error)
{
}
server::server(boost::asio::io_service &io_service,
short port)
{
}
void server::start_accept()
{
}
void server::handle_accept(session *new_session, const
boost::system::error_code &error)
{
}
//界面头文件
#ifndef QT_BOOST_SERVER_H
#define QT_BOOST_SERVER_H
#include
<QtGui/QMainWindow>
#include "ui_qt_boost_server.h"
#include "asiotcpserverthread.h"
class qt_boost_server : public QMainWindow
{
public:
private:
private slots:
};
#endif // QT_BOOST_SERVER_H
//界面实现类 点击按钮启动线程
#include "qt_boost_server.h"
qt_boost_server::qt_boost_server(QWidget *parent, Qt::WFlags
flags)
{
}
qt_boost_server::~qt_boost_server()
{
}
void qt_boost_server::pbStartServerClicked()
{
}