c++ socket 如何将一个对象发送给客户端?

2025-04-04 17:18:11
推荐回答(4个)
回答1:

可以传递结构体,比如:
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);
就传过去了。

回答2:

如你所说,可以使用序列化,将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;
}

回答3:

第一种 打包 利用三方控件 比如json。第二种 自定义序列化流

回答4:

用这个函数send就行了