网络上可变数量的参数

时间:2013-06-10 14:43:43

标签: c++ network-programming boost-asio

我正在尝试使用boost asio库创建客户端服务器应用程序。起初我设计了程序来发送具有相同模式和相同长度的请求和响应,即有一个分隔符,在每个参数之间我把这个分隔符分隔参数,在服务器端我根据分隔符解析传入流参数。 问题是随着程序的增长,我意识到在每个请求/响应上发送每个参数并不是一个好主意,因为有很多参数,根据请求/响应的类型,只需要很少的参数。所以我的问题是通过网络发送可变数量的参数会是什么样的设计?

2 个答案:

答案 0 :(得分:3)

您可以使用下面提到的消息ID创建消息层次结构。

struct Msg{
    int msg_id;
    type t1;
    type t2;
}

struct init_Msg : public Msg{
   type init_param;
}

struct inti end_Msg : public Msg{
   type end_param;
}

然后,您可以在客户端创建具有消息ID的特定消息。将其序列化并通过网络发送到服务器。在服务器端,您可以反序列化它,并可以使用消息ID来标识消息的类型。 要序列化数据,您可以使用名为protobuf的第三方库。 看看https://code.google.com/p/protobuf/

答案 1 :(得分:1)

如果数据量很小,我不介意基于文本的解决方案。 只需写入/读取数据一个属性
(=名称:+值)每一行。 也许甚至使用xml。有读/写的库。