socket中的send函数可以传输char*类型的对象,如果需要传输类对象的话,可以使用CArchive和CMemfile结合的方式来传输。
1.建立CObject类,CObject类或其字类是支持序列化的;
2.先将类通过CArchive和CMemfile序列化成字节流;
3.通过send函数发送CMemfile对象内存块的指针;
4.在服务器端,使用recv函数,接收内存块,并存入缓冲区中;
5.使用CMemfile的attach方法,存入CMemfile对象中;
6.反序列化,得到传输的类对象。
发送:
CArchive m_ArchiveOut(&m_File, CArchive::store|CArchive::bNoFlushOnDelete);
pMsg->Serialize(m_ArchiveOut);
m_ArchiveOut.Flush();
send(clientfd,(char*)m_File.Detach(),m_File.GetLength(),0);
接收:
if ((bytes = recv(socket,(char*)temp,50,0)) < 1)
{
printf("Failed to receive bytes from client\n");
}
m_File.Attach((BYTE *)temp,32);
CArchive m_ArchiveIn(&m_File, CArchive::load| CArchive::bNoFlushOnDelete);
pMsg->Serialize(m_ArchiveIn);