boost库在工作(26)网络客户端之一

说到网络,就立即回想到1997年那时,上网只是为了收发一下EMAIL,没有别的事情可做,并且大多数还是连接成局部网的情况。在局部网时,在一个计算机房里,最多只有10多台电脑联机,这样的局部网只能干一件事情,就是玩多人网络游戏,这个多人只支持4个人一起玩。随着时间推进,到1999年时就可以上网看新闻和使用QQ了,这时网络主要用来聊天,玩游戏的机会不多,做别的事情也不行,因为网络的速度很慢。到了2005年左右,网络终于快起来了,这时网络都使用ADSL连接了,带宽有1M左右,这时就可以玩网络游戏没有太大问题,看网上新闻和办公都可行了。到目前,网络的带宽都有4M以上了,看电影、看电视、打网络电话,网上购物已经大行其道。随着电商推进,网络已经深入地影响所有人的生活方方面面。比如,可以异地购物,在深圳这边可以在网上下一个礼物的订单,把礼物直接送给北京的朋友。不再需要在深圳这边的商场购物再快递出去。又比如通过移动网络的叫出租车软件,正在改变出租车行业的方方面面。以前出租车在大街上不断地,没有目标地转来转去,既没有提高收益,也没有节能环保。通过目前手机上打出租车软件和手机GPS定位的功能,可以很容易安排行车路线,提高出租车效率,也提高社会资源的利用率,更加可以减少能源消耗,更加环保了。可见,网络是一个彻底地改变人们生活方方面面的工具,以前很多不可能的事情,目前都变成可能,变得更加有效地提高生产力。

 

既然网络那么重要,网络的开发工作也变成重头戏,在boost库里会把网络的开发工作变得比较简单,变得功能比较强大,模式比较清晰。网络组成的方式有很多种,比如X25网络、CAN网络、TCP/IP网络。在这里主要介绍和学习是TCP/IP网络,由于目前这种网络的方式,已经是事实上的标准方式。TCP/IP网络里,要表示一个端点是通过IP地址来表现的,但IP地址对于不懂底层网络的人来说,是比较难记住的,因此人们给IP地址起一个名称,就叫做域名。在一台主机里,网络又可以提供多个服务,每个服务通过端口来表示,当然也会给端口起一个名称叫服务名称。在IP地址和域名之间相互的转换,就叫做域名解释。为了把人们容易记住的IP地址字符串和域名转换成网络底层的表示,在boost库里引入了一个类boost::asio::ip::tcp::resolver::query,用这个类来保存IP地址、域名、IP地址的类型、主机的端口或服务名称。如下面的例子:

// boost_019.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <boost/asio/ip/tcp.hpp >
#include <iostream>

//测试网络服务查询
//软件开发人员: 蔡军生  2013-05-29
//QQ: 9073204
void Test(void)
{
	boost::asio::ip::tcp::resolver::query query("www.boost.org", "http");
	std::cout << "host_name: " << query.host_name() << " service_name:" << query.service_name() 
		<< std::endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
	Test();

	system("pause");

	return 0;
}

在上面的例子里:query对象就是用来保存域名www.boost.org和服务名称http,这样就把人们容易记住的方式保存起来了,但这样并不能直接交给网络的底层去使用,还需进行转换才可以。要想知道如何转换,请看后面的例子。


你可能感兴趣的:(boost库在工作(26)网络客户端之一)