1
我需要设计一个套接字,它将侦听传入请求的端口并发送回复以响应这些请求。 这些套接字也将负责在某些事件上发送数据到端口(与上面提到的数据无关)。使用谷歌原型缓冲区发送/接收数据
这一切,我必须做的谷歌原型缓冲区。
任何人都可以请建议我一些关于这些好文章或提供我这方面的帮助。
我需要设计一个套接字,它将侦听传入请求的端口并发送回复以响应这些请求。 这些套接字也将负责在某些事件上发送数据到端口(与上面提到的数据无关)。使用谷歌原型缓冲区发送/接收数据
这一切,我必须做的谷歌原型缓冲区。
任何人都可以请建议我一些关于这些好文章或提供我这方面的帮助。
您可以使用proto缓冲区与C++的任何网络库。要发送proto缓冲区,只需在您的proto缓冲区对象上调用SerializeToArray
并通过网络发送该数组。如果您收到对象,请使用ParseFromArray
函数将您的数组反序列化回原始缓冲区对象。
升压ASIO可用于的是,看到服务器和客户端here
例子的例子(只是为了表示其原理):
class connection {
public:
connection(const std::string& server, const std::string& port)
try
: is_ok_(false)
, resolver_(ioservice_)
, query_ (server, port)
, socket_ (ioservice_)
{
GOOGLE_PROTOBUF_VERIFY_VERSION;
asio::connect(socket_, resolver_.resolve(query_));
} catch (...) { throw exception("Couldn't connect"); }
~connection() {
socket_.close();
}
bool send_receive(Query* q, Response* r) {
if (0 == q) return false;
int query_length = q->ByteSize();
std::vector<uint8_t> buf(query_length);
if (false == q->SerializeToArray(&(buf[0]), query_length)) {
std::cerr << "Couldn't serialize protobuf" << std::endl;
return false;
}
socket_.write_some(asio::buffer(buf));
if (0 == r) return false;
size_t s = socket_.read_some(asio::buffer(buf));
r->ParseFromArray(&(buf[0]), (int)buf.size());
}
private:
boost::asio::io_service ioservice_;
tcp::resolver resolver_;
tcp::resolver::query query_;
tcp::socket socket_;
bool is_ok_;
}
那么,谷歌协议缓冲区真的是有据可查的自己。只需访问https://code.google.com/p/protobuf/ – mrVoid 2014-09-12 12:37:52