一个对象对boost网络接口的封装有一个Close()接口[code]boost::system::error_code ec; m_socket->cancel(ec); m_socket->shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec); m_socket->close(ec); ......释放对象等操作[/code]觉大部分下都非常的正常, 有时候会有如下问题..... 当我调用上面代码后, 既然又收到异步消息, 说对方关闭连接,最终导致程序异常....[code]void CTcpSession::__readData() { if(m_sock...
by ruchong - C/C++ - 2010-08-13 16:17:22 阅读(2760) 回复(0)
请问,我现在已经和客户机连上了,怎样获取它的端口?怎样主动对它发数据。 我已经有的对象 tcp::socket socket_; handler_allocator allocator_;
NO.1 asio 读操作大总结: A. Boos::asio::read 同步读方式 void client::read_data(char * sourse , int num ) { boost::asio::read( socket_own , boost::asio::buffer( sourse , num ) ); } Buffer 可以换成 boost::streambuf 如: boost::asio::streambuf response ; boost::asio::read (socket, response ); 而 streambuf 是能过自动扩充的 。 B. boost::asio::read_until 同步方式读, 但是读到特定的字...
一般而言我们创建用于接收error的类型大多声明如下:boost::system::error_code error 我们用这个类型去接受在函数中产生的错误如socket.connect( endpoint, error); 如果连接失败,错误类型会保存到error中,比如连接主机失败可能会返回这样的错误boost::asio::error::host_not_found;通过if (error)检测到error后,抛出异常throw boost::system::system_error(error);需要注意的是,我们的error被 转化成 system_error了显...
在boost::asio中的io_service提供了receive,read_some等收包的方法。 我用他们从网络上循环收包时遇到一个问题: 当read_some没有收到指定的长度时就会一直阻塞,除非对端关闭连接,会产生一个 boost::asio::error::eof,否则无法跳出来; 请问asio能不能像linux的read,recv等函数一样,最后返回实际接收长度? io_service ios; char buf[1024]; int len; while(1) { len = ios.read_some(boost::asio::buffer(bearer, 1024), e...
[code]class Person
{
public:
Person(const string& _name):name(_name){}
string Name()
{
return name;
}
string name;
};
int main()
{
Person p1("hello");
boost::bind(&Person::Name, _1)(p1);
return 0;
}[/code]对于这样的 bind 我不知道 该 怎么处理它的返回值, 如果是 boost::bind(&Person::Name,p1) 返回值可以是 boost::function
我使用boost中的asio方式实现一个tcp的客户端程序,我使用《boost程序库完全开放指南》中的例子改写的。 采用的方式为:主线程中启动一个子线程,用于执行io_service的相关操作,而主线程中产生待发送的数据。 我现在采用的方式是在子线程中启动一个定时器,在定时器的回调函数中定时检测“待发送数据缓冲器”,如果缓冲区中有数据就调用start_write()函数发送数据。 但是我觉得这种方式不太好,相当于一种轮询的方式,我觉得应该...