关于如何编码数据以通过套接字发送的任何建议?
例
struct {
int id,
std::string name,
std::string address
}
我目前有这个:
std::string s;
client_type client = { INVALID_SOCKET, -1, "" };
send(client.socket, s.c_str(), strlen(s.c_str()), 0);
我可以发送一个字符串。将上述信息发送到服务器的最佳方法是什么?
使用序列化库,并通过该库将数据转换为已知数据格式之一。例如,我使用 cereal(查看链接以获取示例(库将我的数据序列化为 json 格式。这是C++序列化库的一个很好的列表。选择最适合您的格式,然后选择一个库来序列化和反序列化数据。
下面是一个针对您的案例使用cereal
的 xml 序列化示例(编辑:立即编译(:
#include <cereal/archives/xml.hpp>
#include <sstream>
#include <iostream>
struct SomeData{
int id;
std::string name;
std::string address;
template <class Archive>
void serialize( Archive & ar )
{
ar( id, name, address );
}
};
int main()
{
std::stringstream ss;
// this block is used to make sure the destrcutor of archive is called
// which flushes the output into string stream.
{
cereal::XMLOutputArchive archive( ss );
SomeData myData{4, "name", "address"};
archive( myData );
}
std::string s = ss.str();
// test output
std::cout << s << std::endl;
// send data
send(client.socket, s.c_str(), s.length(), 0);
return 0;
}
这是输出:
<?xml version="1.0" encoding="utf-8"?>
<cereal>
<value0>
<value0>4</value0>
<value1>name</value1>
<value2>address</value2>
</value0>
</cereal>