收到客户端包,有个int字段地址为空。求助

大大啊 2012-11-19 12:20:21
我有这样的一个包体结构
这个包结构带一些包的操作方法



struct MsgHeader
{
int msglength; //包的总大小
int16 msgType; //包类型
MsgHeader()
{
SetLength(sizeof(msglength) + sizeof(msgType));
}
void SetLength (int len) { msglength = len;}
.......
...
};


struct Packet:MsgHeader
{
char m_buf[MESSAGE_PACKET_MAX_SIZE];
UINT m_pos;
Packet()
{
memset(m_buf,0,sizeof(m_buf));
m_pos = 0;
SetLength(sizeof(MsgHeader) + sizeof(msgType) + sizeof(m_pos));
}

....

void Begin()
{
m_pos = 0;
}

......

PushInt()...
PushString().....
};



客户端发送


Packet msg;
msg.Begin();
msg.SetType(9102);
msg.PushInt8('a');
msg.PushInt8('b');
msg.PushInt8('c');
msg.PushInt8('d');
msg.PushInt8('e');
msg.PushInt8('f');
int result = send(client_sock,(const char*)&msg,sizeof(Packet),0);



服务器收到数据后

Packet *packs = (Packet *)m_buff;

转换包体的时候 这个 packs 里的 m_pos地址好像为空的。不知道什么原因。。
packs ->Begin(); 这样就报错了!!!

是不是大小端转换问题?
难道长度不够 ?
求助各位了

...全文
119 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
龙哥依旧 2012-11-19
  • 打赏
  • 举报
回复
先看长度够不够!
转角天边 2012-11-19
  • 打赏
  • 举报
回复
引用 6 楼 hubaolin 的回复:
有时候 m_pos 为 一长串 数字 例如 88736339;; 长度,我检查了 发18个长度,,接收也是 18个长度!!
有一个方法你试试,在recv的时候把m_buff改成(char *)&m_buff,如果不行,我也没招了, 我在自己电脑上试,是可以正常接收的
大大啊 2012-11-19
  • 打赏
  • 举报
回复
有时候 m_pos 为 一长串 数字 例如 88736339;; 长度,我检查了 发18个长度,,接收也是 18个长度!!
大大啊 2012-11-19
  • 打赏
  • 举报
回复
引用 4 楼 anhuizhuanjiao 的回复:
m_buff你定义的是多大,我按照你的思路试了下,接收成功了
1024*128 这么大。。。 其他数据接收都成功。。就是m_pos 不正确。。。奇怪
转角天边 2012-11-19
  • 打赏
  • 举报
回复
m_buff你定义的是多大,我按照你的思路试了下,接收成功了
buyong 2012-11-19
  • 打赏
  • 举报
回复
m_buff没收全
sduxiaoxiang 2012-11-19
  • 打赏
  • 举报
回复
SetType是设置port么? 大小端在同一平台上一般没啥区别,跨平台要考虑 接收完了,看看你发的东西的内存和收的内存是否一致。。

64,648

社区成员

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

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