【Boost】boost库asio详解9——UDP的简单例子1
2016-03-15 12:36
423 查看
服务器:
#include "stdafx.h"
#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
using namespace std;
using namespace boost::asio::ip;
#define BUFFER_SIZE (16 * 1024)
class UDPServer {
public:
UDPServer(boost::asio::io_service &ios, int port);
void doReceive(const boost::system::error_code& error, size_t bytesRecvd);
static udp::socket* getUDPServersocket();
inline void listen() {
memset(bufferedData, 0, BUFFER_SIZE);
socket.async_receive_from(boost::asio::buffer(bufferedData, BUFFER_SIZE), clientPoint,
boost::bind(&UDPServer::doReceive, this, boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
std::cout << "listening ...."<<std::endl;
}
private:
int sport;
udp::socket socket;
static udp::socket* psocket;
udp::endpoint clientPoint;
char bufferedData[BUFFER_SIZE];
};
udp::socket* UDPServer::psocket = NULL;
UDPServer::UDPServer(boost::asio::io_service &ios, int port) :
socket(ios, udp::endpoint(udp::v4(), port)) {
psocket = &socket;
listen();
}
void UDPServer::doReceive(const boost::system::error_code& error, size_t bytesRecvd) {
cout << "received from<" << clientPoint.address().to_string() << ":" << clientPoint.port() << ">" << endl;
cout << endl;
listen();
}
udp::socket* UDPServer::getUDPServersocket() {
return psocket;
}
int main()
{
boost::asio::io_service ios;
UDPServer tUDPServer(ios,10038);
ios.run();
return 0;
}
#include "stdafx.h"
#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
using namespace std;
using namespace boost::asio::ip;
#define BUFFER_SIZE (16 * 1024)
class UDPServer {
public:
UDPServer(boost::asio::io_service &ios, int port);
void doReceive(const boost::system::error_code& error, size_t bytesRecvd);
static udp::socket* getUDPServersocket();
inline void listen() {
memset(bufferedData, 0, BUFFER_SIZE);
socket.async_receive_from(boost::asio::buffer(bufferedData, BUFFER_SIZE), clientPoint,
boost::bind(&UDPServer::doReceive, this, boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
std::cout << "listening ...."<<std::endl;
}
private:
int sport;
udp::socket socket;
static udp::socket* psocket;
udp::endpoint clientPoint;
char bufferedData[BUFFER_SIZE];
};
udp::socket* UDPServer::psocket = NULL;
UDPServer::UDPServer(boost::asio::io_service &ios, int port) :
socket(ios, udp::endpoint(udp::v4(), port)) {
psocket = &socket;
listen();
}
void UDPServer::doReceive(const boost::system::error_code& error, size_t bytesRecvd) {
cout << "received from<" << clientPoint.address().to_string() << ":" << clientPoint.port() << ">" << endl;
cout << endl;
listen();
}
udp::socket* UDPServer::getUDPServersocket() {
return psocket;
}
int main()
{
boost::asio::io_service ios;
UDPServer tUDPServer(ios,10038);
ios.run();
return 0;
}
相关文章推荐
- shell脚本--猜数字
- POJ2524 Ubiquitous Religions
- 理解Scale9Sprite
- C++11 右值引用 编译器验证
- pip install -r requirements.txt 安装mysqldb失败 解决方案
- 老实pear_Excel 操作类 Spreadsheet_Excel_Writer 常用参数说明
- 这才是真正的物流大数据挖掘思路
- WCF扩展之实现ZeroMQ绑定和protocolBuffer消息编码(一)概要设计
- apache的URL重写
- int和Integer的区别
- 开始学习C语言C++在这里记录自己的成长。简单的两变量交换问题
- Redis集群方案及实现
- ios 毛玻璃效果
- Trapping Rain Water
- CSMA/CD中重传与冲突检测机制
- VMware虚拟机下安装CentOS7.0图文教程
- Linux安装redis
- 重装系统多次后开机进入系统选择画面时居然出现双系统
- GPS定位例子
- C++怎么把字符串中的小写变为大写