堆和栈的生存期有关问题(C/S模式通信中)
发布时间:2010-05-30 00:26:22 文章来源:www.iduyao.cn 采编人员:星星草
堆和栈的生存期问题(C/S模式通信中)
我写了一个基于客户-服务器(C/S)模式的应用程序(并非网络通信的)。其主要功能是:服务器运行在后台(EXE),客户运行在前台(APP)。客户向服务器提出请求,然后服务器把处理好的数据传送到客户端。在模拟器上可以正常运行,没有任何问题,能够达到预期效果。但是,一放到手机上就出大问题:首先,客户可以向服务器发送消息,可以也可以收到服务器响应的消息,但是一旦进行数据通信的时候,即用RMessage写回数据的时候就异常退出。
客户-服务器通信部分代码:
//aStateMsg和imsg都是自定义的结构体(TStateMsg)类型,里头是4个TINT型数据。
//CLIENT
iStateBuffer.Set( reinterpret_cast <TUint8*> ( &aStateMsg ), sizeof( aStateMsg ),
sizeof( aStateMsg ) );
messageParameters[0] = static_cast <TAny*> ( &iStateBuffer );
SendReceive( ERequstState, &messageParameters[0], aStatus );
//SERVER
TPtr8 ptr( reinterpret_cast <TUint8*> ( &imsg ), sizeof( imsg ),
sizeof( imsg ) );
TRAPD(err, iMessage.WriteL(iMessage.Ptr0(),ptr));
if(err)
{
PanicClient(EBadDescriptor);
}
iMessage.Complete(ERequestComplete);
后来看《高效编程》上面说,传递给异步请求的客户端数据必须不是基于栈的,于是我将客户端代码修
改如下:
HBufC8* hbuf = HBufC8::NewLC(sizeof(aStateMsg));
TPtr8 ptr = hbuf-> Des();
messageParameters[0] = static_cast <TAny*> (&ptr);
这下在模拟器上也无法运行了(编译可以通过),也是到了写回数据的时候就异常退出。不知道基于堆的数据传递是不是我上面的写法?请高人指点了。
还有,我最后干脆把异步模式改为同步模式了,在模拟器上运行正常,放到手机上同样是异常退出。
这下子我真的没辙了,同步、异步都不行,难道这种IPC方式在手机上不可用?有人知道吗?
------解决方案--------------------
HBufC8* hbuf = HBufC8::NewLC(sizeof(aStateMsg));
TPtr8 ptr = hbuf-> Des();
messageParameters[0] = static_cast <TAny*> (&ptr); //这个你传的是栈变量
你要么传HBufC8*进去,要么传raw data buffer + size 进去。但这都取决于服务器怎么解释传进去的数据.
HBufC8* hbuf = HBufC8::NewLC(sizeof(aStateMsg));
messageParameters[0] = static_cast <TAny*> (hbuf-> Des().Ptr());
messageParameters[1] = sizeof(aStateMsg);
或
messageParameters[0] = static_cast <TAny*> (hbuf )
------解决方案--------------------
检查一下其他地方的代码,也不一定是找个地方的问题。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
高手,求个S60v3 FP2 320*240分辨率的SDK
求个S60v3 FP2 320*240分辨率的SDK,
240*320的SDK虽然可以调分辨率的,但我想要一个和E72一...
-
请教关于smybian上使用sqlite的问题
请问如何在symbian 9.1版本上使用sqlite啊?
------解决方案--------------------
直接去sql...
-
symbian 可以内嵌浏览器吗
谁有内嵌浏览器的简单代码吗?或者如何实现内嵌浏览器。谢谢
------解决方案--------------------
ht...
-
symbian:如何判断一个文件是否系统支持的手机铃声格式
现在需要扫描一些固定后缀的文件如MP3,aac等显示出来供用户选择设置为手机铃...
-
数据库求助!!
我创建了一个RDbStoreDatabase,想把通讯录的数据库内容复制过来,该如何实现?实在是不想一条条的insert。。。
------解...
-
Specified file '\Symbian\9.1\S60_3rd_MR\EPOC32\RELEASE\WINSCW\UDEB\.lib' not found 什么意思?
请大家帮我解决一下,...
-
关于Symbian的express signed
我想给一个Symbian程序做一个express signed,在得到了publisheID后,还需要一个Content ID才能完成,可...
-
CPbkContactEngine::NewL()真机崩溃
如题,在模拟器上正常,在真机上崩溃
哪位遇到过?
------解决方案--------------------
我也遇...
-
请问在symbian如何获取最近手机基站的lac和cid?
请问在symbian如何获取最近手机基站的lac和cid?
------解决方案---------------...
-
求救rvct2.2问题:Cannot obtain license for Compiler (feature compiler) with license version >= 2.2
在carbide用rvct2.2编译...