c 套接字服务器端发送消息,c++ - 如何在C ++中通过套接字从客户端向服务器发送struct的结构列表(序列化问题)? - 堆栈内存溢出...

我已经“手动”执行了类似我怀疑您想做的事情。

对于非简单类型(DataPktType),您可以考虑以下粗略概述(如果只是为了帮助您入门)。

首先,我向需要参与的所有类添加了2个虚拟方法-在我的情况下,我们称它们为存储和还原。 这些方法仅处理其自身类的数据属性。

从某种意义上说,restore()是store()的逆函数。

struct SType{

int Num;

char Word[20];

char sugg[20];

virtual void store(ostream& os);

virtual void restore(istream& is);

};

struct DataPktType

{

list MyList;

char filename[MAX_SIZE];

int numslaves;

virtual void store(ostream& os);

virtual void restore(istream& is);

};

因此,DataPktType.store()可能会将每个POD数据属性传输到ostream中:

DataPktType::store(ostream& os)

{

os << MyList.size(); // gotta know how many to extract later

for (auto it = myList.begin(); myList.end(); it++)

{

it->store(os); // tell the SType to store itself at this point in the stream

}

os << filename;

os << numslaves;

}

然后,“逆”可能类似于

DataPktType::restore(istream& is)

{

size_t listSize = 0;

is >> listSize;

// input error checks

for(size_t i=0; i

{

SType listItem;

listItem.restore(is); // assumes the list item contents are 'next' in the file

MyList.push_back(listItem); // I don't use std::list often,

// there seems to be several choices for adding to a list

}

is >> filename;

is >> numslaves;

}

这些是我认为您需要做的事情。

请注意,没有指针进入流。

请注意,对称不是完美的,但是您将必须弄清楚如何处理每个动作。

在我的努力下,我相信我在此过程中添加了一些简单的检查...

另外,我的团队在第一个实现中使用了文本。 作为人类,这将更容易调试,并且您可以使用编辑器来调试“对称”问题。

此外,您可能会发现文本I / O性能足够,因此可以将其保留为文本。

我们有一些紧迫的期限,最终选择了二进制I / O。 但是我们保留文本I / O只是为了测试。

祝好运。

PS-我们最终为存储/恢复的内容添加了一个“版本”号,以支持在项目代码演变过程中进行结构更改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值