////////////////////// // 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;