我正在學習boost asio並出錯。我寫了簡單的客戶端(我可以從它發送數據,但是當我讀取數據時,我甚至不能編譯它)我使用協議緩衝區來序列化數據。所以文件的#include 「test.pb.h」 是probuffer類在客戶端使用升級asio讀取數據
我的代碼客戶端:
#include <boost/array.hpp>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/foreach.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/thread/thread.hpp>
#include <cstdlib>
#include <iostream>
#include <string>
#include <thread>
#include "test.pb.h"
using boost::asio::ip::tcp;
int main(int argc, char** argv)
{
try
{
// connect to the server:
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
std::string const server_address = "localhost";
std::string const server_port = "10000";
tcp::resolver::query query(server_address, server_port);
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::socket socket(io_service);
boost::asio::connect(socket, endpoint_iterator);
//while (true)
{
Person p = Person();
p.set_id(22);
p.set_name("Jack vorobey");
// std::cout << p.id();
// std::cout << p.name();
std::string data; // this will hold serialized data
bool ok = p.SerializeToString(&data);
assert(ok);
// std::cout << data.size() << std::endl;
boost::asio::write(socket, boost::asio::buffer(data))
boost::asio::read(socket, boost::asio::buffer(data));;
// break; // Connection closed cleanly by peer.
// std::cout << data.size() << std::endl; // shows a reduction in amount of
remaining data
// boost::asio::read(socket, boost::asio::buffer(data) /*,
}
boost::asio::transfer_exactly(65536) */);
}
catch (std::exception& e)
{
//std::cerr << e.what(luuu) << std::endl;
}
std::cout << "\nClosing";
std::string dummy;
}
我的錯誤我不明白的代碼: 錯誤C2679:二進制 '=':沒有操作員發現它需要類型'const boost :: asio :: const_buffer'的右手操作數(或者沒有可接受的轉換)1> c:\ local \ boost_1_55_0 \ boost \ asio \ buffer.hpp(136):可能是'boost :: asio :: mutable_buffer & boost :: asio :: mutable_buffer :: operator =(const boost :: asio :: mutable_buffer &)' 1>嘗試匹配參數列表'(boost :: asio ::穆塔ble_buffer,const boost :: asio :: const_buffer)'
你爲什麼不張貼樣品用略少的語法錯誤?您的編譯器將永遠不會編譯您在問題中顯示的代碼。 – sehe