Boost套接字读取功能不起作用
Posted
技术标签:
【中文标题】Boost套接字读取功能不起作用【英文标题】:Boost socket read functions not working 【发布时间】:2014-08-08 16:29:25 【问题描述】:我正在尝试编写一个 C++ 代码 (VS2008),它将通过 Boost 打开一个套接字并通过它运行用户指定的命令。到目前为止,我有这个:
#include <boost/asio.hpp>
#include <boost/array.hpp>
#include <boost/bind.hpp>
#include <string>
#define MAXSIZE 1000000
//...
void MyClass::processCommand(std::string command)
boost::asio::io_service io;
boost::asio::ip::tcp::socket socket(io);
boost::asio::ip::tcp::endpoint e(boost::asio::ip::address::from_string("127.0.0.1"), 60151); //Info for the connection I need to make...
this->socket.open(boost::asio::ip::tcp::v4());
this->socket.connect(e);
this->socket.write_some(boost::asio::buffer(command, command.size());
this->socket.send(boost::asio::buffer(command, command.size());
boost::array<char, MAXSIZE> buffer;
this->socket.async_read_some(boost::asio::buffer(b, MAXSIZE),
boost::bind(MyClass::handle_read, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
void MyClass::handle_read(const boost::system::error_code& error, size_t bytes_transferred)
//Haven't worked this part out yet...
我尝试按照 Boost 网站 here 上的示例对我的代码进行建模。但是,当我尝试编译它时,会收到大量错误消息,主要是关于 bind 期望不同数量的参数。我对使用 Boost 真的很陌生,老实说有点迷失了如何做到这一点,所以我不确定该怎么做才能纠正这个问题,因为它似乎与他们网站上的示例相匹配。我还尝试使用 Boost 的 read_some() 函数来执行此代码,该代码可以在我发布的关于该方法的问题here 中找到。
基本上,我只是想问我可以做些什么来让这段代码按预期运行。我不太担心我最终需要使用两个函数中的哪一个(read_some() 或 async_read_some()),只要它有效。如果另一种方式更好,我将不胜感激任何帮助解决该问题的问题。如果这种方式更好并且有人知道如何解决它,那也很棒。提前非常感谢。
编辑:我之前不小心忘记了包含我收到的错误消息。其中有很多(约 70 个),都与 boost::bind
有关,并遵循以下语法:
error: C2780: 'boost::_bi::bind_t<Rt2,boost::_mfi::cmf8<R,T,B1,B2,B3,B4,B5,B6,B7,B8>,_bi::list_av_9<A1,A2,A3,A4,A5,A6,A7,A8,A9>::type> boost::bind(boost::type<T>,R (__cdecl T::* )(B1,B2,B3,B4,B5,B6,B7,B8) const,A1,A2,A3,A4,A5,A6,A7,A8,A9)' : expects 11 arguments - 4 provided
error: C2780: 'boost::_bi::bind_t<Rt2,boost::_mfi::cmf7<R,T,B1,B2,B3,B4,B5,B6,B7>,_bi::list_av_8<A1,A2,A3,A4,A5,A6,A7,A8>::type> boost::bind(boost::type<T>,R (__cdecl T::* )(B1,B2,B3,B4,B5,B6,B7) const,A1,A2,A3,A4,A5,A6,A7,A8)' : expects 10 arguments - 4 provided
//etc.
其中有一些具有相同消息,但表示它预期的参数数量不同,从 11 到 3。它似乎还针对不同格式给出了 3 次相同的通用错误消息集。我将分别举一个例子,因为这组错误消息中的所有其他错误消息都是相同的语法,只是参数数量不同:
//first is same as above
error: C2780: 'boost::_bi::bind_t<Rt2,boost::_mfi::cmf8<R,T,B1,B2,B3,B4,B5,B6,B7,B8>,_bi::list_av_9<A1,A2,A3,A4,A5,A6,A7,A8,A9>::type> boost::bind(boost::type<T>,R (__cdecl T::* )(B1,B2,B3,B4,B5,B6,B7,B8) const,A1,A2,A3,A4,A5,A6,A7,A8,A9)' : expects 11 arguments - 4 provided
error: C2780: 'boost::_bi::bind_t<R,boost::_mfi::cmf8<R,T,A1,A2,A3,A4,A5,A6,A7,A8>,_bi::list_av_9<A1,A2,A3,A4,A5,A6,A7,A8,A9>::type> boost::bind(R (__cdecl T::* )(B1,B2,B3,B4,B5,B6,B7,B8) const,A1,A2,A3,A4,A5,A6,A7,A8,A9)' : expects 10 arguments - 4 provided
error: C2780: 'boost::_bi::bind_t<R,R(__cdecl *)(B1,B2,B3,B4,B5,B6,B7,B8,B9),_bi::list_av_9<A1,A2,A3,A4,A5,A6,A7,A8,A9>::type> boost::bind(R (__cdecl *)(B1,B2,B3,B4,B5,B6,B7,B8,B9),A1,A2,A3,A4,A5,A6,A7,A8,A9)' : expects 10 arguments - 4 provided
error: C2780: 'boost::_bi::bind_t<boost::_bi::unspecified,F,_bi::list_av_9<A1,A2,A3,A4,A5,A6,A7,A8,A9>::type> boost::bind(F,A1,A2,A3,A4,A5,A6,A7,A8,A9)' : expects 10 arguments - 4 provided
error: C2780: 'boost::_bi::bind_t<R,F,_bi::list_av_9<A1,A2,A3,A4,A5,A6,A7,A8,A9>::type> boost::bind(boost::type<T>,F,A1,A2,A3,A4,A5,A6,A7,A8,A9)' : expects 11 arguments - 4 provided
error: C2780: 'boost::_bi::bind_t<R,F,_bi::list_av_9<A1,A2,A3,A4,A5,A6,A7,A8,A9>::type> boost::bind(F,A1,A2,A3,A4,A5,A6,A7,A8,A9)' : expects 10 arguments - 4 provided
我还截取了完整错误日志的屏幕截图(或者至少我可以一次在屏幕上显示的尽可能多的屏幕截图),如下所示:
【问题讨论】:
您收到“大量错误消息”如何解决? 哦,请不要在最后一段中问另一个不同的问题——问一个新问题(但先做一些功课。异步与同步问题已多次解决(谷歌是你的朋友)) 错误信息如下: error: C2780: 'boost::_bi::bind_t在传递给bind
时取handle_read
的地址
this->socket.async_read_some(boost::asio::buffer(b, MAXSIZE),
boost::bind(&MyClass::handle_read, this,
// ^
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
【讨论】:
看起来是这样 :) 非常感谢您(并且实际上愿意提供帮助而不是粗鲁,与 cmets 中的人不同)我一直在为此苦苦挣扎几个小时,非常感谢您的帮助以上是关于Boost套接字读取功能不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Boost union 在 1.67 中不起作用,但在 1.61 中起作用。为啥?