symbian 短信socket监听问题代码分析
//通过监听短信接受套接字,在socket处实现拦截接受短信,可是出现了一下两个问题,请侠客帮忙解决!
//第一个问题是if(BindErr == KErrNone)语句内部没有执行,
//第二个问题是程序到iSmsMessage->InternalizeL(readStream)时退出。
void CSMSEngine::SocketListen()
{
_LIT(KTag, "#");
TBuf8<2> matchTag;
matchTag.Copy(KTag);
iSocketServer.Connnect();
TInt err = iSocket.Open(iSocketServer, KSMSAddrFamily, KSockDatagram, KSMSDatagramProtocol);
if(err==KErrNone)
{
TRequestStatus iStatus;
TSmsAddr smsaddr;
smsaddr.SetSmsAddrFamily(ESmsAddrMatchText);
smsaddr.SetTextMatch(matchTag);
TInt BindErr = iSocket.Bind(smsaddr);
//为什么没有成功绑定呢?通过写日志的发现程序走不进下面的if语句啊!
if(BindErr == KErrNone)
{
iPckgBuf() = KSockSelectRead;
//Applies an asynchronous I/O control operation on a socket.
iSocket.Ioctl( KIOctlSelect,iStatus, &iPckgBuf, KSOLSocket);
iRead=ETrue;
SetActive();
}
}
}
// -----------------------------------------
// CSMSEngine::RunL()
// Gets hit everytime a message with the 'tag' arrives
// -----------------------------------------
//当把上面if(err==KErrNone)注释掉时,可以使得程序走到RunL();但是通过日志发现程序
//只能走到iSmsMessage->InternalizeL(readStream)之前,
void CSMSEngine::RunL()
{
if(iRead)
{
CSmsBuffer *smsBuffer = CSmsBuffer::NewL();
CleanupStack::PushL(smsBuffer);
RSmsSocketReadStream readStream(iSocket);
iSmsMessage = CSmsMessage::NewL(iFs,CSmsPDU::ESmsDeliver,smsBuffer);
iSmsMessage->InternalizeL(readStream);
//这一句好像也不能执行,为什么吗啊?
readStream.Close();
iSmsMessage->Buffer().Extract(iBuf,0,iSmsMessage->Buffer().Length());
iSocket.Ioctl( KIoctlReadMessageSucceeded,iStatus, &iPckgBuf, KSolSmsProv);
CAknInformationNote* note122=new(ELeave) CAknInformationNote;
note122->ExecuteLD(iBuf);
iRead=EFalse;
SetActive();
CleanupStack::PopAndDestroy(smsBuffer);
}
}
[解决办法]
试试smsAddr.SetTextMatch(KNullDesC8);
[解决办法]
楼上,你的问题解决了吗,我今天也遇到同样的问题,绑定时出现 -11错误
[解决办法]
楼主,为什么绑定没有成功?给个解释及解决方法啊
[解决办法]
短信端口被别的软件占用了(网秦、来电通等),卸载他们后试试