日期:2014-05-16  浏览次数:21209 次

boost::asio::async_write问题,回调函数没有被调用!
连接:

main(...)
{
boost::asio::io_service io_service;
tcp::socket socket(io_service);
socket.async_connect(boost::asio::ip::tcp::endpoint(boost::asio::ip::address(), 5050),
connect_handler);
io_service.poll(); //connect_handler被调用了,连接成功

boost::system::error_code error;
size_t len = strlen(buff) + 1;
boost::asio::mutable_buffers_1 send_buff = boost::asio::buffer(buff, len);

boost::asio::async_write(socket, send_buff, boost::asio::transfer_at_least(len), send_handler);
cout << "io_service.run() " << io_service.poll() << endl;
//send_handler没有被调用,io_service.poll()返回0


问题请看注释。
注:服务端接收数据是完全正常的(所以客户端发送肯定也是成功的),服务端用api的epoll模型,没有使用asio,不过这肯定不是问题。
服务端与客户端同机。使用127.0.0.1这个ip连接。

------解决方案--------------------
正在学asio,和你一样的代码,不过我的两个handler都只是cout
看到io_service.run() 2

------解决方案--------------------
http://code.google.com/p/boost-doc-zh/downloads/list
这里有个boost的中文文档。看过了吗?我也学了一下boost,不过asio没细看。
------解决方案--------------------
你没有真正run()啊!!!
------解决方案--------------------
引用:
cout << "io_service.run() " << io_service.poll() << endl;
这个里面的poll改成run效果一样。
或者把上面一行直接写成io_service.run();也不行。


// TestBoost.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <boost/asio.hpp>
#include <iostream>
using namespace std;
using boost::asio::ip::tcp;
void connect_handler(const boost::system::error_code& error /*Result of operation*/);
void send_handler(const boost::system::error_code& error /*Result of operation*/, size_t bytes_transferred);

int _tmain(int argc, _TCHAR* argv[])
{
/*
boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));