我的服务器向客户发数据,为什么有时候客户可以收到,而有时候客户却异常退出?我跟了一下断点,问题在iMessage.WriteL这里,异常退出代码为-38,错误的描述符,晕了。
我的疑问是既然问题出在iMessage.WriteL这里,但是为什么不是每次都退出,而且是随机的,(发数据)有时候时间长,有时候时间短。
下面是客户-服务器通信的部份代码:
//CLIENT:
void RServerSession::RequestStateData( TStateMsg& aStateMsg, TRequestStatus& aStatus )
{
TAny* messageParameters[KMaxMessageArguments];
TPckg <TStateMsg> StateMsg( aStateMsg );
messageParameters[0] = (TAny*)&StateMsg;
SendReceive( ECyberWallServRequstState, messageParameters, aStatus );
}
//SERVER:
void CCyberWallServerSession::SendStateMsgToClient()
{
if(iWaitingForTick)
{
iWaitingForTick = EFalse;
iServer.GetStateMsg(iMyMsg);
TPckg <TStateMsg> hand_mymsg(iMyMsg);
TRAPD(err, iMessage.WriteL(iMessage.Ptr0(),hand_mymsg));
if(err)
{
PanicClient(EBadDescriptor);
}
iMessage.Complete(ECyberWallServRequestComplete);
}
}
问题就出在iMessage.WriteL(iMessage.Ptr0(),hand_mymsg)这句,我跟断点,异常退出代码为-38---错误的描述符,不知道怎么回事。如果是错误的描述符,为什么一开始不出问题,而是一段时间后。
//TStateMsg
struct TStateMsg
{
TInt AllSize ;
TInt Count ;
TInt DenyCount ;
TInt FlowOver ; };
求达人解惑啊,都困扰我好久了,子藤大哥,救命啊。
------解决方案--------------------------------------------------------
TPtr8 ptr(reinterpret_cast <TUint8*> (&time), sizeof(time), sizeof(time));
TRAPD(leave, iMessage.WriteL(iMessage.Ptr0(), ptr));用这种方式试试.