boost.asio mysql_boost::asio与PocoMySQL冲突,如何解决?

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

#include "stdafx.h"

#include

#include

#include

#define POCO_NO_UNWINDOWS

#include "Poco/Data/MySQL/Connector.h"

#include "mysql.h"

#define WIN32_LEAN_AND_MEAN

#include

#include

#include

#include

using boost::asio::ip::udp;

using boost::asio::ip::tcp;

using boost::asio::ip::address;

using namespace boost::asio;

#define max_len 1024

class clientSession

:public boost::enable_shared_from_this

{

public:

clientSession(boost::asio::io_service& ioservice)

:m_socket(ioservice)

{

memset(data_,'\0',sizeof(data_));

}

~clientSession()

{}

tcp::socket& socket()

{

return m_socket;

}

void start()

{

boost::asio::async_write(m_socket,

boost::asio::buffer("link successed!"),

boost::bind(&clientSession::handle_write,shared_from_this(),

boost::asio::placeholders::error));

/*async_read跟客户端一样,还是不能进入handle_read函数,如果你能找到问题所在,请告诉我,谢谢*/

// --已经解决,boost::asio::async_read(...)读取的字节长度不能大于数据流的长度,否则就会进入

// ioservice.run()线程等待,read后面的就不执行了。

//boost::asio::async_read(m_socket,boost::asio::buffer(data_,max_len),

//        boost::bind(&clientSession::handle_read,shared_from_this(),

//        boost::asio::placeholders::error));

//max_len可以换成较小的数字,就会发现async_read_some可以连续接收未收完的数据

m_socket.async_read_some(boost::asio::buffer(data_,max_len),

boost::bind(&clientSession::handle_read,shared_from_this(),

boost::asio::placeholders::error));

}

private:

void handle_write(const boost::system::error_code& error)

{

if(error)

{

m_socket.close();

}

}

void handle_read(const boost::system::error_code& error)

{

if(!error)

{

std::cout << data_ << std::endl;

//boost::asio::async_read(m_socket,boost::asio::buffer(data_,max_len),

//    boost::bind(&clientSession::handle_read,shared_from_this(),

//    boost::asio::placeholders::error));

m_socket.async_read_some(boost::asio::buffer(data_,max_len),

boost::bind(&clientSession::handle_read,shared_from_this(),

boost::asio::placeholders::error));

}

else

{

m_socket.close();

}

}

private:

tcp::socket m_socket;

char data_[max_len];

};

typedef boost::shared_ptr session_ptr;

class test

{

public:

test(){

}

void init()

{        short port = 8100/*argv[1]*/;

boost::asio::io_service ioservice;

boost::asio::io_service& m_ioservice(ioservice);

tcp::endpoint endPoint(tcp::v4(),port);

session_ptr new_session(new clientSession(ioservice));

tcp::acceptor acceptor_(ioservice,endPoint);

acceptor_.async_accept(new_session->socket(),

boost::bind(&test::handle_accept_xxx_1_3,

this,boost::asio::placeholders::error,

new_session));

}

void handle_accept_xxx_1_3(const boost::system::error_code& error,session_ptr& session)

{

}

};

int _tmain(int argc, _TCHAR* argv[])

{

test test;

test.init();

std::cout<

getchar();

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值