// // TCP Socket使用 // // 创建 iSocketServ.Connect() iEchoSocket.Open(iSocketServ, KAfInet, KSockStream, KProtocolInetTcp)
// 连接1 ConnectL(TUint32 aAddr) iAddress.SetPort(7); iAddress.SetAddress(aAddr); iEchoSocket.Connect(iAddress, iStatus);
// 连接2 ConnectL(const TDesC& aServerName) iResolver.Open(iSocketServ, KAfInet, KProtocolInetUdp) iResolver.GetByName(aServerName, iNameEntry, iStatus); // 异步
// ---> iNameRecord = iNameEntry(); TInetAddr::Cast(iNameRecord.iAddr).Output(ipAddr); ConnectL(TInetAddr::Cast(iNameRecord.iAddr).Address()); // -->连接1
// 读: iEchoSocket->Recv(iBuffer, 0, iStatus);
// 写 iEchoSocket->Write(iBuffer, iStatus);
// UDP的: // 读 iEchoSocket->RecvFrom(iBuffer,aAddr,NULL,iStatus); // 写 iEchoSocket->SendTo(iBuffer,aAddr,NULL,iStatus);
// 超时{ Cancel(); iEngineStatus = ETimedOut; TRequestStatus* p=&iStatus; // Signal CEchoEngine::RunL() imediately SetActive(); User::RequestComplete(p, ETimedOut); // }
// 关闭 Cancel(); // 所有的CActive iEchoSocket.Close(); iSocketServ.Close();
/ // 关于IAP设置/// / // 创建 iSocketServ.Connect() iConnect.Open(iSocketServ) // RConnection iConnect;
// 初始化连接参数 void CIAPConnectEngine::SetConnectionPreferences( TUint aBearer, TBool aDialog, TUint32 aIapId) { iPref.SetDirection(ECommDbConnectionDirectionOutgoing); if (aDialog) { iPref.SetDialogPreference(ECommDbDialogPrefPrompt); } else { iPref.SetDialogPreference(ECommDbDialogPrefDoNotPrompt); } iPref.SetIapId(aIapId); iPref.SetBearerSet(aBearer); iPref.SetDirection(ECommDbConnectionDirectionOutgoing); }
// 枚举已有的接入点信息 iConnect.EnumerateConnections(connectionCount) if (connectionCount) { TPckgBuf<TConnectionInfoV2> connectionInfo; for (TUint i = 1; i <= connectionCount; ++i) { iConnect.GetConnectionInfo(i, connectionInfo); // 找到接入点,就不用再创建了。 //if (connectionInfo().iIapId == aIap) // { // connected = ETrue; // break; // } } }
// 连接IAP iConnect.Start(iPref, iStatus); // 此处会出现IAP选则框,选中后进入runL SetActive(); // 显示等待对话框 if(iWaitDialog==NULL) { LOG_WRITE(_L("iWaitDialog==NULL")); iWaitDialog = new ( ELeave )CAknWaitDialog( reinterpret_cast<CEikDialog**>( &iWaitDialog ), ETrue ); iWaitDialog->SetCallback(this); iWaitDialog->ExecuteDlgLD( CAknNoteDialog::ENoTone,R_WAIT_NOTE_NOEXIT ); }
---> run 方法中执行用户选中IAP if ( iWaitDialog ) { iWaitDialog->ProcessFinishedL(); }
// 再次连接服务器。需要缓存连接参数。
// 使用connect RStringPool strP = iSession.StringPool(); RHTTPConnectionInfo connInfo = iSession.ConnectionInfo(); connInfo.SetPropertyL ( strP.StringF(HTTP::EHttpSocketServ,RHTTPSession::GetTable() ), THTTPHdrVal (iConnectEngine->SocketSevr().Handle()) );
RConnection& connection = iConnectEngine->ConnectSrc(); TInt connPtr = REINTERPRET_CAST(TInt,&connection); connInfo.SetPropertyL ( strP.StringF(HTTP::EHttpSocketConnection, RHTTPSession::GetTable() ), THTTPHdrVal (connPtr) ); iConnectFlag|=CONNECT_FLAG_BINDED;