结构数据的网络传输

wwx321 2003-08-19 06:55:01
我做一个结构体;打算把它从客户端传到服务端,可总是有误;请朋友们指点一下。
结构体为:
typedef struct _SEND_FROM_IP_
{
EVENT_COMMAND command;
int msg;
int key;
CPoint point;
CString username;
CString password;
}SEND_INFO;
我在CAsyncSocket类中调用如下:
#define InfoSize sizeof(SEND_INFO)
SEND_INFO info;
info.command=E_LOGIN;
info.msg=-1;
info.key=-1;
info.point=CPoint(0,0);
info.username="sa";
info.password="sa";
char buf[InfoSize];
memset((char*)buf,0,InfoSize);
memcpy((char*)buf,(char*)&info,InfoSize);
Send((char*)buf,InfoSize);

在服务端验证转换如下:
memset((char*)m_buf,0,sizeof(m_buf));
if((m_nLength=Receive((char*)m_buf,sizeof(m_buf)))!=SOCKET_ERROR)
{
memcpy((char*)&m_SendInfo,(char *)m_buf,sizeof(SEND_INFO));
}
得到的转换结果为:
m_SendInfo.command=E_LOGIN; //此项正确
m_SendInfo.username=""; //结果不一致
m_SendInfo.password=""; //结果不一致
请大家帮我分析一下,错误的原因?
...全文
42 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mme 2003-08-27
  • 打赏
  • 举报
回复
if((m_nLength=Receive((char*)m_buf,sizeof(m_buf)))!=SOCKET_ERROR)

我估计90%都是这句的错,改成

if((m_nLength=Receive((char*)m_buf,500))!=SOCKET_ERROR)

这样来试试,可能就行了

因为sizeof(m_buf)可能是等于2的,不信你单步跟踪试试就知道了
yinzhaohui 2003-08-27
  • 打赏
  • 举报
回复
1.不用使用memset,memcpy贝份后发送,接收也是一样,直接类型转换
2.接收端的m_nLength的长度是否正确。
kunjun_oy 2003-08-27
  • 打赏
  • 举报
回复
同意Analyst
Analyst 2003-08-19
  • 打赏
  • 举报
回复
CPoint是可以的,EVENT_COMMAND估计是个enum,也是可以的。
symonds 2003-08-19
  • 打赏
  • 举报
回复
都不可以
typedef struct _SEND_FROM_IP_
{
EVENT_COMMAND command; //
int msg;
int key;
CPoint point;
char username[80];
char password[80];
}SEND_INFO;
所有的东西都不能有指针型的EVENT_COMMAND 该结构是什么类型?
还有
CPoint 可以改为POINT 的
Analyst 2003-08-19
  • 打赏
  • 举报
回复
CString是不能这么传地~~~CString内部是个字符指针,你传个指针给对方是一点用也没有的。改成这样就可以了:
typedef struct _SEND_FROM_IP_
{
EVENT_COMMAND command;
int msg;
int key;
CPoint point;
char username[80];
char password[80];
}SEND_INFO;
snowroad 2003-08-19
  • 打赏
  • 举报
回复
结构数据需要按字节对齐。否则传输后会有错位现象。
在setting->C++中的Category中选择Code genaration,把Struct member alignment选择为1Byte,重新编译。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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