Chinaunix首页 | 论坛 | 博客
  • 博客访问: 897427
  • 博文数量: 299
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2493
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-21 10:07
个人简介

Linux后台服务器编程。

文章分类

全部博文(299)

文章存档

2015年(2)

2014年(297)

分类: C/C++

2014-11-02 10:09:50

之前一直看的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();


点击(此处)折叠或打开

  1. #include <boost/asio.hpp>
  2. #include <boost/array.hpp>
  3. #include <iostream>
  4. #include <string>

  5. boost::asio::io_service io_service;
  6. boost::asio::ip::tcp::resolver resolver(io_service);
  7. boost::asio::ip::tcp::socket sock(io_service);
  8. boost::array<char, 4096> buffer;

  9. void read_handler(const boost::system::error_code &ec, std::size_t bytes_transferred)
  10. {
  11.   if (!ec)
  12.   {
  13.     std::cout << std::string(buffer.data(), bytes_transferred) << std::endl;
  14.     sock.async_read_some(boost::asio::buffer(buffer), read_handler);
  15.   }
  16. }

  17. void connect_handler(const boost::system::error_code &ec)
  18. {
  19.   if (!ec)
  20.   {
  21.     boost::asio::write(sock, boost::asio::buffer("GET / HTTP 1.1\r\nHost: highscore.de\r\n\r\n"));
  22.     sock.async_read_some(boost::asio::buffer(buffer), read_handler);
  23.   }
  24. }

  25. void resolve_handler(const boost::system::error_code &ec, boost::asio::ip::tcp::resolver::iterator it)
  26. {
  27.   if (!ec)
  28.   {
  29.     sock.async_connect(*it, connect_handler);
  30.   }
  31. }

  32. int main()
  33. {
  34.   boost::asio::ip::tcp::resolver::query query("", "80");
  35.   resolver.async_resolve(query, resolve_handler);
  36.   io_service.run();
  37. }

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();

点击(此处)折叠或打开

  1. #include <boost/asio.hpp>
  2. #include <string>

  3. boost::asio::io_service io_service;
  4. boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 80);
  5. boost::asio::ip::tcp::acceptor acceptor(io_service, endpoint);
  6. boost::asio::ip::tcp::socket sock(io_service);
  7. std::string data = "HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, world!";

  8. void write_handler(const boost::system::error_code &ec, std::size_t bytes_transferred)
  9. {
  10. }

  11. void accept_handler(const boost::system::error_code &ec)
  12. {
  13.   if (!ec)
  14.   {
  15.     boost::asio::async_write(sock, boost::asio::buffer(data), write_handler);
  16.   }
  17. }

  18. int main()
  19. {
  20.   acceptor.listen();
  21.   acceptor.async_accept(sock, accept_handler);
  22.   io_service.run();
  23. }





阅读(2436) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~