首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

boost:asio:async_write有关问题,回调函数没有被调用

2013-08-01 
boost::asio::async_write问题,回调函数没有被调用!连接:main(...){boost::asio::io_service io_servicet

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));


t.wait();
std::cout<< "hello world"<<endl;
*/
char chBuffer[1024]="abcdefsdlkfjsdlfjsldjflsdjflsdjfkljk";
boost::asio::io_service io_service;
    tcp::socket socket(io_service);
cout<<boost::asio::ip::address()<<endl;
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(chBuffer) + 1;
    boost::asio::mutable_buffers_1 send_buff = boost::asio::buffer(chBuffer, len);

    boost::asio::async_write(socket, send_buff, boost::asio::transfer_at_least(len), send_handler);
    cout << "io_service.run() " << io_service.poll() << endl;
getchar();
return 0;
}

void connect_handler(const boost::system::error_code& error /*Result of operation*/)
{
if ( !error )
{
cout<<"abc"<<endl;
}
else
{
cout<<"connect"<<endl;
}
}

 void send_handler(const boost::system::error_code& error, // Result of operation.
   size_t bytes_transferred           // Number of bytes written from the
                                           // buffers. If an error occurred,
                                           // this will be less than the sum
                                           // of the buffer sizes.
 )
{
if ( !error )
{
cout<<"abc"<<endl;
}
else
{
cout<<"send"<<endl;
}
}


这是我测试的代码,在vs2010下可以正常运行输出
abc
send
io_service.run()  2
不明白为什么你的运行不正常,send_handler定义和实现不对?


可能性不大,编译都通过了
.....

热点排行