boost库在工作(38)网络UDP客户端之八

前面创建了一个UDP服务器,主要是提供时间查询,因为它是一个服务器,所以没有能力连接服务器的,因此需要创建一个客户端来,后面主要就是做这件事情。在说明怎么样编写UDP客户端之前,在这里回复一个网友的问题,他说TCP基本上已经可以无错地做任何事情,包括我前面说的视频通讯,因而使用UDP是不必要学习的。在这点上,UDP还是有不可替换的领域,比如要开发局部网的广播,在TCP里是一对一的连接,它是干不了这件事情的。在工业一些应用里,在局部网里有很多设备是通过网络通讯的,但需要快速地搜索到这些设备是否在线,就可以使用UDP来广播一下,就立即知道那些设备在线了。由于使用了boost库,下面创建UDP的代码是非常简单的,代码如下:

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

#include "stdafx.h"
#include <ctime>

#include <boost/asio/ip/tcp.hpp>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/array.hpp>

#include <iostream>
#include <string>

//使用UDP命名空间
using boost::asio::ip::udp;

//
//创建一个UDP的客户端。
//软件开发人员: 蔡军生  2013-08-24 
//QQ: 9073204
//

void TestUdpClient(void)
{
	//定义一个IO服务对象。
	boost::asio::io_service io_service;

	//IP地址解释器
	udp::resolver resolver(io_service);
	//查询连接的IP域名和端口
	udp::resolver::query query(udp::v4(), "127.0.0.1", "daytime");
	udp::endpoint receiver_endpoint = *resolver.resolve(query);

	//创建一个UDP的SOCKET
	udp::socket socket(io_service);
	//使用UDP的协议打开服务。
	socket.open(udp::v4());

	//发送消息给服务器,send_buf是发送的内容,receiver_endpoint是接收的服务器地址。
	boost::array<char, 1> send_buf  = { 0 };
	socket.send_to(boost::asio::buffer(send_buf), receiver_endpoint);

	//准备接收服务器返回来的数据。
	boost::array<char, 128> recv_buf;
	udp::endpoint sender_endpoint;
	size_t len = socket.receive_from(
		boost::asio::buffer(recv_buf), sender_endpoint);

	//输出接收到服务器的数据。
	std::cout.write(recv_buf.data(), len);
}

int _tmain(int argc, _TCHAR* argv[])
{
	TestUdpClient();
	system("PAUSE");

	return 0;
}

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