首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

socket发送链表给客户端或者服务端,该怎么解决

2012-03-15 
socket发送链表给客户端或者服务端C/C++ code// 定义的结构体struct _ATTRIBUTE{BOOL _bTestint _iTestf

socket发送链表给客户端或者服务端

C/C++ code
// 定义的结构体struct _ATTRIBUTE{    BOOL _bTest;    int _iTest;    float _fTest;    vector<int> _vctTest;};// 发送端_ATTRIBUTE att;att._bTest = TRUE;att._iTest = 888;att._fTest = 3.1415926;att._vctTest.push_back(999);int lenBuff = sizeof(_ATTRIBUTE);char *sendBuf = new char[lenBuff];memcpy(sendBuf, &att, lenBuff);send(m_sockClient, sendBuf, lenBuff, 0);// 接收端SOCKET sock = accept(...);int lenBuff = sizeof(_ATTRIBUTE);char *revcBuff = new char[lenBuff];recv(sockConn, revcBuff, lenBuff, 0);_ATTRIBUTE att;memcpy(&att, revcBuff, lenBuff);// 在这里接受到的数据中 除了_vctTest(vector<int>)不正常外,其他的都是对的// 请问有什么办法能接收一个链表数据吗?


[解决办法]
vector 是在堆上保存的数据。
也就是说 vector 是有指针的。
需要复制指针的数据。
手动复制吧。
想自动很难哦。
看看 RPC 中的那些指针你就知道了。
[解决办法]
http://wenku.baidu.com/view/cf4d32eb81c758f5f61f679c.html
memcpy这个函数,楼主有没有考虑到溢出?
先开辟内存,计算接受字符的长度,试试看
[解决办法]
是不是att内部有指针(vector<int> _vctTest),push和pop的时候大小是变化的。
你接收端只有最基本的东西没有给内部的指针分配空间啊。这样memcpy空间没有的话会把偶错的。
[解决办法]
探讨

vector 是在堆上保存的数据。
也就是说 vector 是有指针的。
需要复制指针的数据。
手动复制吧。
想自动很难哦。
看看 RPC 中的那些指针你就知道了。

[解决办法]
可以将链表中的数据序列化,然后send发送,接收端接收以后自己解析一下

热点排行