Symbian的Socket

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章