Привет всем, я новичок в asio и boost, я пытался реализовать TCP-сервер и клиент, чтобы я мог передавать std :: vector, но пока у меня ничего не вышло. Я считаю, что документация по расширению Asio отсутствует (мягко говоря) и трудна для понимания (английский не является моим основным языком).
В любом случае, я смотрел примеры iostreams и пытался реализовать объектно-ориентированное решение, но у меня ничего не вышло.
Сервер, который я пытаюсь реализовать, должен иметь возможность принимать соединения от нескольких клиентов (как мне это сделать?)
Сервер должен получить std :: vector, / * Сделать что-нибудь * /, а затем вернуть его клиенту, чтобы клиент мог сказать, что сервер получил данные без изменений.
файл * .h
class TCP_Server : private boost::noncopyable
{
typedef boost::shared_ptr<TCP_Connection> tcp_conn_pointer;
public :
TCP_Server(ba::io_service &io_service, int port);
virtual ~TCP_Server() {}
virtual void Start_Accept();
private:
virtual void Handle_Accept(const boost::system::error_code& e);
private :
int m_port;
ba::io_service& m_io_service; // IO Service
bi::tcp::acceptor m_acceptor; // TCP Connections acceptor
tcp_conn_pointer m_new_tcp_connection; // New connection pointer
};
* .cpp файл
TCP_Server::TCP_Server(boost::asio::io_service &io_service, int port) :
m_io_service(io_service),
m_acceptor(io_service, bi::tcp::endpoint(bi::tcp::v4(), port)),
m_new_tcp_connection(TCP_Connection::Create(io_service))
{
m_port = port;
Start_Accept();
}
void TCP_Server::Start_Accept()
{
std::cout << "[TCP_Server][Start_Accept] => Listening on port : " << m_port << std::endl;
//m_acceptor.async_accept(m_new_tcp_connection->Socket(),
// boost::bind(&TCP_Server::Handle_Accept, this,
// ba::placeholders::error));
m_acceptor.async_accept(*m_stream.rdbuf(),
boost::bind(&TCP_Server::Handle_Accept,
this,
ba::placeholders::error));
}
void TCP_Server::Handle_Accept(const boost::system::error_code &e)
{
if(!e)
{
/*boost::thread T(boost::bind(&TCP_Connection::Run, m_new_tcp_connection));
std::cout << "[TCP_Server][Handle_Accept] => Accepting incoming connection. Launching Thread " << std::endl;
m_new_tcp_connection = TCP_Connection::Create(m_io_service);
m_acceptor.async_accept(m_new_tcp_connection->Socket(),
boost::bind(&TCP_Server::Handle_Accept,
this,
ba::placeholders::error));*/
m_stream << "Server Response..." << std::endl;
}
}
Как должен выглядеть клиент? Как сохранить соединение, пока оба приложения «разговаривают»?