#ifdef _MSC_VER
#define _WIN32_WINNT 0x0A00
#endif
#include <iostream>
#include <boost/shared_ptr.hpp>
#include <boost/asio.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/bind.hpp>
#include <boost/function.hpp>
typedef boost::function<void(const boost::system::error_code&, const int& handle)> Callback;
Callback funcRead_;
Callback funcWrite_;
boost::shared_ptr<boost::asio::io_service> io_service_;
boost::shared_ptr<boost::asio::ip::tcp::socket> socket_;
void OnSendData(const boost::system::error_code& ErrorCode, const int& handle)
{
std::cout << "OnSendData" << std::endl;
if (ErrorCode.value() != 0)
{
std::cout << " Error::Sending Data::" << ErrorCode.message() << std::endl;;
}
}
boost::array<char, 5> bufferRead_;
void OnReceiveData(const boost::system::error_code& ErrorCode, const int& handle)
{
std::cout << "OnReceiveData" << std::endl;
if (ErrorCode.value() == 0)
{
for (int i = 0; i < bufferRead_.size(); i++)
{
std::cout << bufferRead_[i] << " ";
}
std::cout << std::endl;
}
boost::asio::async_read(*socket_, boost::asio::buffer(bufferRead_, bufferRead_.size()), funcRead_);
}
void StartReading(int n)
{
io_service_->run();
}
int main()
{
io_service_ = boost::shared_ptr<boost::asio::io_service>(new boost::asio::io_service);
socket_ = boost::shared_ptr<boost::asio::ip::tcp::socket>(new boost::asio::ip::tcp::socket(*io_service_));
boost::asio::ip::tcp::resolver::iterator tcpEndPoint;
boost::asio::ip::tcp::resolver resolver(*io_service_);
boost::asio::ip::tcp::resolver::query queryA("192.168.1.152", boost::lexical_cast<std::string> (48190));
tcpEndPoint = resolver.resolve(queryA);
socket_->connect(tcpEndPoint->endpoint());
funcWrite_ = boost::bind(OnSendData, boost::asio::placeholders::error, 0);
funcRead_ = boost::bind(OnReceiveData, boost::asio::placeholders::error, 0);
boost::asio::async_read(*socket_, boost::asio::buffer(bufferRead_, bufferRead_.size()), funcRead_);
std::thread t(StartReading, NULL);
std::vector<char> sendBuffer_(100);
while (1)
{
std::cin >> &sendBuffer_[0];
socket_->async_send(boost::asio::buffer(sendBuffer_, sendBuffer_.size()), funcWrite_);
}
}