当前位置: 代码迷 >> Symbian >> symbian Socket 有底组的结构 传输
  详细解决方案

symbian Socket 有底组的结构 传输

热度:8077   发布时间:2013-02-26 00:00:00.0
symbian Socket 有数组的结构 传输
传输数据结构为:

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生成的值与客户端接收到的内容做比对,看是否相符
------解决方案--------------------------------------------------------
谢谢楼上的朋友指点,不过这种方法还是无法测试准确。
------解决方案--------------------------------------------------------
我的意思是,如果二者不能匹配的话,说明数据编排有问题。其实,你自己定义一个数据编排规则,只要客户端、服务端都遵守就行。
------解决方案--------------------------------------------------------
这就是协议
网络数据就是一长串,
怎么解析就是协议。
  相关解决方案