之前一直看的unix网络编程,使用linux系统调用来创建服务器。而在boost中也同样可以创建服务器,boost对底层的系统调用进行了封装,使用的时候更加面向对象。只需要向相应的对象传递一定的参数即可创建连接:
使用的主要的对象如下:
client方面:
由main出发分别是:
boost::asio::ip::tcp::resolver::query m_query("", "80");
boost::asio::ip::tcp::resolver m_resolver(m_query, resolve_handler);
m_server.run();
-
#include <boost/asio.hpp>
-
#include <boost/array.hpp>
-
#include <iostream>
-
#include <string>
-
-
boost::asio::io_service io_service;
-
boost::asio::ip::tcp::resolver resolver(io_service);
-
boost::asio::ip::tcp::socket sock(io_service);
-
boost::array<char, 4096> buffer;
-
-
void read_handler(const boost::system::error_code &ec, std::size_t bytes_transferred)
-
{
-
if (!ec)
-
{
-
std::cout << std::string(buffer.data(), bytes_transferred) << std::endl;
-
sock.async_read_some(boost::asio::buffer(buffer), read_handler);
-
}
-
}
-
-
void connect_handler(const boost::system::error_code &ec)
-
{
-
if (!ec)
-
{
-
boost::asio::write(sock, boost::asio::buffer("GET / HTTP 1.1\r\nHost: highscore.de\r\n\r\n"));
-
sock.async_read_some(boost::asio::buffer(buffer), read_handler);
-
}
-
}
-
-
void resolve_handler(const boost::system::error_code &ec, boost::asio::ip::tcp::resolver::iterator it)
-
{
-
if (!ec)
-
{
-
sock.async_connect(*it, connect_handler);
-
}
-
}
-
-
int main()
-
{
-
boost::asio::ip::tcp::resolver::query query("", "80");
-
resolver.async_resolve(query, resolve_handler);
-
io_service.run();
-
}
server:
boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 12345);
boost::asio::ip::tcp::acceptor m_acceptor(m_server, m_endpoint);
m_acceptor.listen();
m_acceptor.async_accept(m_sock, accept_handler);
m_server.run();
-
#include <boost/asio.hpp>
-
#include <string>
-
-
boost::asio::io_service io_service;
-
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 80);
-
boost::asio::ip::tcp::acceptor acceptor(io_service, endpoint);
-
boost::asio::ip::tcp::socket sock(io_service);
-
std::string data = "HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, world!";
-
-
void write_handler(const boost::system::error_code &ec, std::size_t bytes_transferred)
-
{
-
}
-
-
void accept_handler(const boost::system::error_code &ec)
-
{
-
if (!ec)
-
{
-
boost::asio::async_write(sock, boost::asio::buffer(data), write_handler);
-
}
-
}
-
-
int main()
-
{
-
acceptor.listen();
-
acceptor.async_accept(sock, accept_handler);
-
io_service.run();
-
}
阅读(2621) | 评论(0) | 转发(0) |