您的位置:首页 > 其它

【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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: