可以传递结构体,比如:
struct A
{
int a;
int b;
};
struct A a;
send(s,(char*)&a,sizeof(a),0);
另一方接收到数据到buffer后,如buffer的字节长度为buufersize,则
struct b;
memcpy(&b, buffer, buffersize);
就传过去了。
如你所说,可以使用序列化,将user对象序列化成一个流,收到后再进行反序列化。
举一个小例子,这是序列化的思想,LZ可以理解并完善之:
class CArchive;
struct ISerialize
{
virtual void Serialize(CArchive &arch) = 0;
virtual void UnSerialize(CArchive &arch) = 0;
};
class CArchive
{
public:
CArchive(char *buff, int nLen)
{
m_szBuff = szBuff;
m_nLen = nLen;
m_nOffset = 0;
}
CArchive &operator <<(ISerialize &data)
{
data.Serialize();
return *this;
}
CArchive &operator <<(const string &str)
{
memcpy(m_szBuff + m_nOffset, str.c_str(), str.length() + 1);
m_nOffset += str.length() + 1;
return *this;
}
CArchive &operator >>(ISerialize &data)
{
data.UnSerialize();
return *this;
}
CArchive &operator >>(string &str)
{
}
private:
char* m_szBuff;
int m_nLen;
int m_nOffset;
};
class CUser : public ISerialize
{
string name;
string password;
string sex;
string age;
private:
// 实现 CUser 对象的序列化,会被存储到 CArchive 对象中
virtual void Serialize(CArchive &arch)
{
arch << name << password << sex << age;
}
virtual void UnSerialize(CArchive &arch)
{
arch >> name >> password >> sex >> age;
}
};
int main()
{
CUser user;
char szBuff[1024];
CArchive arch(szBuff, 1024);
arch << user;
}
第一种 打包 利用三方控件 比如json。第二种 自定义序列化流
用这个函数send就行了