传输数据结构为:
struct CMD_GP_Logon
{
TInt username;
TInt pwd;
};
客户端:
//创建数据
CMD_GP_Logon gpInfo;
gpInfo.username = 123456;
gpInfo.pwd = 856001;
//传输数据
TInt size = sizeof(gpInfo);
result = m_UserLogon->SendData(gpInfo, size);
SendData方法
//数据转换
TPtr8 ptr(REINTERPRET_CAST(TUint8*,&gpInfo), size);
//发送数据
iEngine->WriteL(ptr);
服务端:
public struct CMD_GP_Logon
{
public int dwPlazaVersion;
public int username;
public int pwd;
};
Socket接受的数据 保存在 pBuffer中
//数据转换
CMD_GP_Logon GpLogon = (CMD_GP_Logon)SocketStruct.BytesToStuct(pBuffer, typeof(CMD_GP_Logon));
这样是成功的.. 可以正确传递接受
但如果结构 中有数组
struct CMD_GP_Logon
{
Byte szAccounts[NAME_LEN];
Byte szPassWord[PASS_LEN];
};
TBuf<NAME_LEN> userName = iLoginContainer->GetUserName();
TBuf<PASS_LEN> pwd = iLoginContainer->GetPwd();
CMD_GP_Logon gpInfo;
memcpy(gpInfo.szAccounts, &userName, CountArray(gpInfo.szAccounts));
memcpy(gpInfo.szPassWord, &pwd, CountArray(gpInfo.szPassWord));
//传输数据
TInt size = sizeof(gpInfo);
result = m_UserLogon->SendData(gpInfo, size);
SendData方法
//数据转换
TPtr8 ptr(REINTERPRET_CAST(TUint8*,&gpInfo), size);
//发送数据
iEngine->WriteL(ptr);
服务端:
public struct CMD_GP_Logon
{
public int dwPlazaVersion;
public string szAccounts;
public string szPassWord;
};
Socket接受的数据 保存在 pBuffer中
//数据转换
CMD_GP_Logon GpLogon = (CMD_GP_Logon)SocketStruct.BytesToStuct(pBuffer, typeof(CMD_GP_Logon));
这行报错 错误为 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。服务端这边为何转换失败? 数据接受没问题。
------解决方案--------------------------------------------------------
给服务端数据结构填写相同的值,调用SocketStruct.StructToBytes生成的值与客户端接收到的内容做比对,看是否相符
------解决方案--------------------------------------------------------
谢谢楼上的朋友指点,不过这种方法还是无法测试准确。
------解决方案--------------------------------------------------------
我的意思是,如果二者不能匹配的话,说明数据编排有问题。其实,你自己定义一个数据编排规则,只要客户端、服务端都遵守就行。
------解决方案--------------------------------------------------------
这就是协议
网络数据就是一长串,
怎么解析就是协议。