socket传输类对象
2015-12-24 16:38
288 查看
来源: http://blog.csdn.net/xhwjc2008/article/details/7905011
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);
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);
相关文章推荐
- UITableView的基本方法总结
- Javascript学习笔记2.2 Javascript与DOM选项卡(滑动门)案例详解
- STL学习系列之一——标准模板库STL介绍
- Android HttpClient设置User_agent的方式
- 结构型:设计模式之代理模式(九)
- getFragmentManager与getChildFragmentManager
- 4.4 Thread
- 搭建Android开发环境
- C/C++之回调函数
- HDU 1863 畅通project (最小生成树是否存在)
- 手机自动化测试:Appium源码分析之跟踪代码分析四 5
- CSS解决图片过大撑破DIV网页方法
- js将页面table导出excel,弹出保存对话框
- View 的属性及系统常用权限
- 手机自动化测试:Appium源码分析之跟踪代码分析四 4
- robotframework+ride+Selenium2Library+AutoItLibrary配置
- Java的对象与类
- hdu 1698 Just a Hook(线段树区间更新求和)
- JavaScript倒计时
- 排序算法总结