服务器:
#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;
}