Qt RFCOMM服务器对其他设备不可用-Symbian3
我正在尝试用Symbian配置RFCOMM服务器 看看我的代码,似乎我没有遗漏任何东西,但其他设备就是看不到我的服务 我用笔记本电脑列出了手机上所有可用的蓝牙服务,但没有 有人能帮我吗 代码如下:Qt RFCOMM服务器对其他设备不可用-Symbian3,qt,bluetooth,symbian,rfcomm,spp,Qt,Bluetooth,Symbian,Rfcomm,Spp,我正在尝试用Symbian配置RFCOMM服务器 看看我的代码,似乎我没有遗漏任何东西,但其他设备就是看不到我的服务 我用笔记本电脑列出了手机上所有可用的蓝牙服务,但没有 有人能帮我吗 代码如下: void BtServer::StartServicoL() { TProtocolDesc pdesc; User::LeaveIfError(iSocketServer.FindProtocol(NOMERFCOMM(), pdesc)); iState = EFindin
void BtServer::StartServicoL()
{
TProtocolDesc pdesc;
User::LeaveIfError(iSocketServer.FindProtocol(NOMERFCOMM(), pdesc));
iState = EFindingAvailablePort;
User::LeaveIfError(iListeningSocket.Open(iSocketServer, NOMERFCOMM));
User::LeaveIfError(iListeningSocket.GetOpt(KRFCOMMGetAvailableServerChannel, KSolBtRFCOMM, iPort));
iState = EBinding;
iBtSocketAddr.SetPort(iPort);
User::LeaveIfError(iListeningSocket.Bind(iBtSocketAddr));
User::LeaveIfError(iListeningSocket.Listen(1));
iServiceAdvertiser->StartL(iPort);
iBtSocketAddr.SetSecurity(iBtSecurity);
iAcceptingSocket.Close();
User::LeaveIfError(iAcceptingSocket.Open(iSocketServer));
iListeningSocket.Accept(iAcceptingSocket, iStatus);
SetActive();
}
void CBluetoothServiceAdvertiser::StartL(const TInt aPort)
{
iPort = aPort;
iState = EConnecting;
User::LeaveIfError(iSdpServ.Connect());
User::LeaveIfError(iSdpDatabase.Open(iSdpServ));
TUUID serviceUUID(UUID_SERVICE);
iSdpDatabase.CreateServiceRecordL(serviceUUID, iRecordHandle);
CSdpAttrValueDES* protocolDescriptorList = CSdpAttrValueDES::NewDESL(NULL);
CleanupStack::PushL(protocolDescriptorList);
TBuf8<TAM_MAX_NRO_PORTA> port;
port.Append((TChar)iPort);
protocolDescriptorList
->StartListL()
->BuildDESL()
->StartListL()
->BuildUUIDL(KRFCOMM)
->BuildUintL(port)
->EndListL()
->EndListL();
iSdpDatabase.UpdateAttributeL(iRecordHandle, KSdpAttrIdProtocolDescriptorList, *protocolDescriptorList);
CleanupStack::PopAndDestroy(protocolDescriptorList);
iSdpDatabase.UpdateAttributeL(iRecordHandle, KSdpAttrIdBasePrimaryLanguage + KSdpAttrIdOffsetServiceName, NOME_SERV);
iSdpDatabase.UpdateAttributeL(iRecordHandle, KSdpAttrIdBasePrimaryLanguage + KSdpAttrIdOffsetServiceDescription, DESC_SERV);
CSdpAttrValue* attrVal = NULL;
TBuf8<TAM_MAX_SERV_DISP> avail;
avail.FillZ(1);
avail[0]=0xff;
attrVal = CSdpAttrValueUint::NewUintL(avail);
CleanupStack::PushL(attrVal);
iSdpDatabase.UpdateAttributeL(iRecordHandle, KSdpAttrIdServiceAvailability, *attrVal);
CleanupStack::PopAndDestroy(attrVal);
}
void BtServer::StartServicoL()
{
tprotocollec-pdesc;
用户::LeaveIfError(iSocketServer.FindProtocol(NOMERFCOMM(),pdesc));
iState=EFindingAvailablePort;
用户::LeaveIfError(iListeningSocket.Open(iSocketServer,NOMERFCOMM));
用户::leaviferor(iListeningSocket.GetOpt(KRFCOMMGetAvailableServerChannel,KSolBtRFCOMM,iPort));
iState=EBinding;
iBtSocketAddr.SetPort(iPort);
用户::LeaveIfError(iListeningSocket.Bind(iBtSocketAddr));
用户::LeaveIfError(iListeningSocket.Listen(1));
iServiceAdvertiser->Start(iPort);
iBtSocketAddr.SetSecurity(iBtSecurity);
iaceptingsocket.Close();
用户::LeaveIfError(iaceptingsocket.Open(iSocketServer));
iListeningSocket.Accept(IAceptingSocket,iStatus);
SetActive();
}
void CBluetoothServiceAdvertiser::start(const TInt aPort)
{
iPort=aPort;
iState=电子连接;
User::LeaveIfError(iSdpServ.Connect());
用户::LeaveIfError(iSdpDatabase.Open(iSdpServ));
TUUID服务UUID(UUID_服务);
CreateServiceRecordL(serviceUUID,iRecordHandle);
CSdpAttrValueDES*protocolderScriptorList=CSdpAttrValueDES::NewDESL(NULL);
CleanupStack::push(protocolderscriptorlist);
TBuf8端口;
端口追加((TChar)iPort);
原编剧
->惊吓者()
->BuildDESL()
->惊吓者()
->BuildUUIDL(KRFCOMM)
->BuildUintL(港口)
->EndListL()
->EndListL();
UpdateAttributeL(iRecordHandle、KSDPAttridProtocoldScriptorList、*ProtocoldScriptorList);
CleanupStack::PopAndDestroy(原脚本列表);
UpdateAttribute论坛电话(iRecordHandle、KSdpAttrIdBasePrimaryLanguage+KSdpAttrIdOffsetServiceName、NOME_SERV);
更新论坛电话(iRecordHandle,KSdpAttrIdBasePrimaryLanguage+KSdpAttrIdOffsetServiceDescription,DESC_SERV);
CSdpAttrValue*attrVal=NULL;
TBuf8有效;
FillZ(1);
avail[0]=0xff;
attrVal=CSdpAttrValueUint::NewUintL(可用);
清除堆叠::PUSH(属性值);
UpdateAttributeL(iRecordHandle,KSdpAttrIdServiceAvailability,*attrVal);
CleanupStack::PopAndDestroy(attrVal);
}