引言
寸光阴,当下我们或许更需要利用现有的知识,应用现有的技术。网络是当前互联网的根本,了解网络便开始显得极其重要。今天我们利用Boost库中Asio部分,浅尝网络服务器。此处不做过于深入的开展,为达成学习目的,只做简单的异步并发服务器。
注意:本篇代码没有直接引用boost等命名空间,为的是新入门Boost的同学能够更好的了解每个参数在boost的具体命名空间位置,有助于更好的理解boost的布局。
版权所有:_OE_
,转载请注明出处:
http://blog.csdn.net/csnd_ayo
服务器用例
我们在做服务器之前,首先细想一下,服务器应具备哪些基本特质。
1、构建:一个服务器应该具备被连接的IP地址(网络地址)、可以被访问的Port(端口号)
2、聆听:服务器应该能够实时处理基本的连接请求
3、处理:交互才是目的,可以与客户端实现基本的交互
4、异步:处理客户端的请求时,不会因为客户端的延迟响应而导致程序假死
建造(Build)
电脑里有非常多的端口,而客户端只会把消息传到约定的地址与端口,只有在正确的端口等待,才能接到自己预期的客户。
就好像楼房里有非常多层楼一样,而快递员只会把物品送到约定的楼层,只有在正确的楼层等待,才能达成预期的结果。
#include <iostream>
#include <boost/asio.hpp>
int main(void) {
try {
std::cout << "server start." << std::endl;
// asio程序必须的io_service对象
boost::asio::io_service ios;
// 具体的服务器地址与端口
boost::asio::ip::tcp::endpoint endpotion(boost::asio::ip::tcp::v4(), 13695);
// 创建acceptor对象,当前的IPV4作为服务器地址(127.0.0.1 || 0.0.0.0),接受端口13695的消息.
boost::asio::ip::tcp::acceptor acceptor(ios, endpotion);
// 打印当前服务器地址
std::cout << "addr: " << acceptor.local_endpoint().address() << std::endl;
// 打印当前服务器端口
std::cout << "port: " << acceptor.local_endpoint().port() << std::endl;
}
catch (...) {
std::cout << "server exceptional." << std::endl;
}
std::cout << "server end." << std::endl;
getchar();
return 0;
}
聆听(Listen)
一个基本的连接,在正常的情况下,应该由客户端发起,服务器应该处于实时监听的状态,因为能接到客户端发起的连接请求,这才是网络操作的根本。
#include <iostream>
#include <boost/asio.hpp>
int main(void) {
try {
std::cout << "server start." << std::endl;
// asio程序必须的io_service对象
boost::asio::io_service ios;
// 具体的服务器地址与端口
boost::asio::ip::tcp::endpoint endpotion(boost::asio::i