Socket中结构体数据的传输

noairman 2010-03-21 02:30:01
我服务端和客服端是这样在类外定义的
typedef struct Data
{
//int order;
CString filedata[4][100];
}DataPacket;
服务端:
int sended;
for (int j=0;j<5;j++)
{
MessageBox(ThreadData.filedata[0][j]);
}
for(int i=1;i<=csnum;i++) if(csrev[i])
if( sended=csrev[i].Send((char*)&ThreadData,sizeof(ThreadData),0))
{
CEdit *ce=((CEdit*)GetDlgItem(IDC_EDIT_CONTENT));
ce->LineScroll(ce->GetLineCount()-1);;
MessageBox("数据发送成功");
}
每次调试出sended都是1600,就是说已经发送过去了。
客服端:
clconect.Receive((char*)&ServerData,sizeof(ServerData),0);
int len=sizeof(ServerData);
每次单步调试收到的len也为1600.表示也收到了数据,为什么在后面这两句就错了,就要死,是我哪里错了吗,请大家帮我看看,我纠结了好久啊……
CString str=ServerData.filedata[0][1];
MessageBox(str);

其中在服务端类中定义有:Data ThreadData;
客服端类中定义有:Data ServerData;
...全文
166 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cattycat 2010-03-21
  • 打赏
  • 举报
回复
CString str=ServerData.filedata[0][1];
这个ServerData是什么类型?也是个结构体?这么转换有问题,网络字节流不一定跟你的对象在内存中是一样的。还要考虑到内存对齐的因素。
noairman 2010-03-21
  • 打赏
  • 举报
回复
还是没有对,在对那一行单步调试的时候,就是死,出现“Unhandled exception in Client.exe(MFC42D.dll):0xC0000005;Access violation”,要是不单步调试,有时就会直接死了,有时就弹出乱码的对话框,我是不是前面哪里有错误啊……
AlanBruce 2010-03-21
  • 打赏
  • 举报
回复

CString str=ServerData.filedata[0][1];//这种初始化方式有保证吗?CString中有重载赋值操作符?

//还是用构造函数吧!
CString str(ServerData.filedata[0][1]);

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧