2011-12-14 3 views
0

Модель телефона: бб кривая 8520"Туннель Failed" исключение в BlackBerry Curve 8520

версия Телефон: 4.6.1.314

Carrier: Airtel Индия

APN: airtelgprs.com

Нет имя пользователя и пароль

Я использую следующий код:

String url="http://<address>:<port>/path;deviceside=true"; 
    HttpConnection conn =(HttpConnection)Connector.open(url,Connector.READ_WRITE,true); 
    int response=conn.getResponseode(); 
    if(responsecode==HttpConnection.HTTP_OK) 
    { 
      //...code for handling the response... 
    } 

Этот код генерирует исключение «туннель». Я не могу понять причину этого. APN правильно определен в телефоне в соответствии с сетевым носителем. Я также могу получить доступ к интернету через браузер.

Ответьте мне, если вы знаете причину отказа туннеля или отказа критического туннеля.

Еще одна вещь, код работает нормально, когда я добавляю interface=wifi вместо deviceside=true (для этого требуется, чтобы WIFI был включен и подключен).

[EDIT]

Я проверил журнал в BlackBerry Curve 8520 мобильных и это выглядит следующим образом:

E net.rim.tcp-TNLf 0 
a net.rim.tunnel-pdp2 1 
a net.rim.hrtRT-EPRj 0x2100000001 
a net.rim.tunnel - STnc-00000000 
a net.rim.tunnel- Open - airtelgprs.com 
a net.rim.tcp-open 

Может ли один догадаться, что случилось после просмотра журнала?

+0

Этот журнал сообщает нам, что «для вашего приложения нет подключения к Интернету». –

+0

Вы решили свою проблему? –

+0

Я УЖЕ УКАЗАЛСЯ В МОЕМ ВОПРОСЕ, ЧТО Я МОГУ ПОЛУЧИТЬ ИНТЕРНЕТ ЧЕРЕЗ ПРОСМОТР – user990967

ответ

9

общая проблема, а также ответил много раз

DeviceInfo.isSimulator(), то расширение "; deviceside = истина"

и

BisConnection затем расширение " ; deviceide = false; ConnectionType = mds-public "

и

BesConnection затем расширение "; deviceside = ложь"

и

WifiConnection затем расширение "; интерфейс = WiFi"

в этом или специальных доступных расширений, так что это не является хорошим способом использования расширений у нас есть классы 1) HttpConnectionFactory 2) HttpConnectionFactoryException

просто импортируйте эти классы в наш проект.HttpConnectionFactory класс должен выбрать расширение в соответствии с порядком по выбору 1) класс один определяют различные типы соединений

/** 
* Copyright (c) E.Y. Baskoro, Research In Motion Limited. 
* 
* Permission is hereby granted, free of charge, to any person 
* obtaining a copy of this software and associated documentation 
* files (the "Software"), to deal in the Software without 
* restriction, including without limitation the rights to use, 
* copy, modify, merge, publish, distribute, sublicense, and/or sell 
* copies of the Software, and to permit persons to whom the 
* Software is furnished to do so, subject to the following 
* conditions: 
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
* OTHER DEALINGS IN THE SOFTWARE. 
* 
* This License shall be included in all copies or substantial 
* portions of the Software. 
* 
* The name(s) of the above copyright holders shall not be used 
* in advertising or otherwise to promote the sale, use or other 
* dealings in this Software without prior written authorization. 
* 
*/ 


import java.io.IOException; 
import java.io.OutputStream; 
import java.util.Vector; 

import javax.microedition.io.Connector; 
import javax.microedition.io.HttpConnection; 

import net.rim.device.api.io.http.HttpHeaders; 
import net.rim.device.api.io.http.HttpProtocolConstants; 
import net.rim.device.api.servicebook.ServiceBook; 
import net.rim.device.api.servicebook.ServiceRecord; 
import net.rim.device.api.system.Branding; 
import net.rim.device.api.system.CoverageInfo; 
import net.rim.device.api.system.DeviceInfo; 
import net.rim.device.api.system.WLANInfo; 



public class HttpConnectionFactory { 

    public static final int TRANSPORT_WIFI = 1; 
    public static final int TRANSPORT_BES = 2; 
    public static final int TRANSPORT_BIS = 4; 
    public static final int TRANSPORT_DIRECT_TCP = 8; 
    public static final int TRANSPORT_WAP2 = 16; 
    public static final int TRANSPORT_SIM = 32; 

    public static final int TRANSPORTS_ANY = TRANSPORT_WIFI | TRANSPORT_BES | TRANSPORT_BIS | TRANSPORT_DIRECT_TCP | TRANSPORT_WAP2 | TRANSPORT_SIM; 
    public static final int TRANSPORTS_AVOID_CARRIER = TRANSPORT_WIFI | TRANSPORT_BES | TRANSPORT_BIS | TRANSPORT_SIM; 
    public static final int TRANSPORTS_CARRIER_ONLY = TRANSPORT_DIRECT_TCP | TRANSPORT_WAP2 | TRANSPORT_SIM; 

    public static final int DEFAULT_TRANSPORT_ORDER[] = { TRANSPORT_SIM, TRANSPORT_WIFI, TRANSPORT_BIS, TRANSPORT_BES, TRANSPORT_WAP2, TRANSPORT_DIRECT_TCP }; 

    private static final int TRANSPORT_COUNT = DEFAULT_TRANSPORT_ORDER.length; 

    // private static ServiceRecord srMDS[], srBIS[], srWAP2[], srWiFi[]; 
    private static ServiceRecord srWAP2[]; 
    private static boolean serviceRecordsLoaded = false; 

    private int transports[]; 
    private int lastTransport = -1; 

// protected Logger log = Logger.getLogger(getClass()); 

    public HttpConnectionFactory() { 
     this(0); 
    } 

    public HttpConnectionFactory(int allowedTransports) { 
     this(transportMaskToArray(allowedTransports)); 
    } 

    public HttpConnectionFactory(int transportPriority[]) { 
     if (!serviceRecordsLoaded) { 
      loadServiceBooks(false); 
     } 
     transports = transportPriority; 
    } 

    public static String getUserAgent() { 
     StringBuffer sb = new StringBuffer(); 
     sb.append("BlackBerry"); 
     sb.append(DeviceInfo.getDeviceName()); 
     sb.append("/"); 
     sb.append(DeviceInfo.getSoftwareVersion()); 
     sb.append(" Profile/"); 
     sb.append(System.getProperty("microedition.profiles")); 
     sb.append(" Configuration/"); 
     sb.append(System.getProperty("microedition.configuration")); 
     sb.append(" VendorID/"); 
     sb.append(Branding.getVendorId()); 

     return sb.toString(); 
    } 



    public HttpConnection getHttpConnection(String pURL) { 
     return getHttpConnection(pURL, null, null); 
    } 

    public HttpConnection getHttpConnection(String pURL, HttpHeaders headers) { 
     return getHttpConnection(pURL, headers, null); 
    } 

    public HttpConnection getHttpConnection(String pURL, byte[] data) { 
     return getHttpConnection(pURL, null, data); 
    } 

    public HttpConnection getHttpConnection(String pURL, HttpHeaders headers, byte[] data) { 

     int curIndex = 0; 
     HttpConnection con = null; 

     while ((con = tryHttpConnection(pURL, curIndex, headers, data)) == null) { 
      try { 
       curIndex = nextTransport(curIndex); 
      } catch (HttpConnectionFactoryException e) { 
       e.printStackTrace(); 
       break; 
      } finally { 
      } 
     } 

     if (con != null) { 
      setLastTransport(transports[curIndex]); 
     } 
//  try { 
//   System.out.println(con.getResponseCode()); 
//  } catch (IOException e) { 
//   // TODO Auto-generated catch block 
//   e.printStackTrace(); 
//  } 
     return con; 
    } 

    private int nextTransport(int curIndex) throws HttpConnectionFactoryException { 
     if ((curIndex >= 0) && (curIndex < transports.length - 1)) { 
      return curIndex + 1; 
     } else { 
      throw new HttpConnectionFactoryException("No more transport available."); 
     } 
    } 

    private HttpConnection tryHttpConnection(String pURL, int tIndex, HttpHeaders headers, byte[] data) { 

     HttpConnection con = null; 
     OutputStream os = null; 

//  log.debug("Trying " + getTransportName(transports[tIndex]) + "... "); 
     switch (transports[tIndex]) 
     { 
     case TRANSPORT_SIM: 
      try { 
       con = getSimConnection(pURL, false);        
      } catch (IOException e) { 
//    log.debug(e.getMessage()); 
//    break; 
      } finally { 
       break; 
      } 
     case TRANSPORT_WIFI: 
      try { 
       System.out.println(transports[tIndex]); 
       con = getWifiConnection(pURL); 
      } catch (IOException e) { 
//    log.debug(e.getMessage()); 
//    break; 
      } finally { 
       break; 
      } 
     case TRANSPORT_BES: 
      try { 
       con = getBesConnection(pURL); 
      } catch (IOException e) { 
//    log.debug(e.getMessage()); 
//    break; 
      } finally { 
       break; 
      } 
     case TRANSPORT_BIS: 
      try { 
       con = getBisConnection(pURL); 
      } catch (IOException e) { 
//    log.debug(e.getMessage()); 
//    break; 
      } finally { 
       break; 
      } 
     case TRANSPORT_DIRECT_TCP: 
      try { 
       con = getTcpConnection(pURL); 
      } catch (IOException e) { 
//    break; 
      } finally { 
       break; 
      } 
     case TRANSPORT_WAP2: 
      try { 
       con = getWap2Connection(pURL); 
      } catch (IOException e) { 
//    log.debug(e.getMessage()); 
//    break; 
      } finally { 
       break; 
      } 
     } 
     if (con != null) { 
      try { 
//    log.debug("url = " + con.getURL()); 
       //add headers to connection 
       if (headers != null) { 
        int size = headers.size(); 

        for (int i = 0; i < size;) { 
         String header = headers.getPropertyKey(i); 
         String value = headers.getPropertyValue(i++); 

         if (value != null) { 
          con.setRequestProperty(header, value); 

         } 
        } 
       } 
       // post data 
       if (data != null) { 
        con.setRequestMethod(HttpConnection.POST); 
        con.setRequestProperty(HttpProtocolConstants.HEADER_CONTENT_TYPE, HttpProtocolConstants.CONTENT_TYPE_APPLICATION_X_WWW_FORM_URLENCODED); 
        con.setRequestProperty(HttpProtocolConstants.HEADER_CONTENT_LENGTH, String.valueOf(data.length)); 

        os = con.openOutputStream(); 
        os.write(data); 
       } else { 
        con.setRequestMethod(HttpConnection.GET); 
       } 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     return con; 
    } 

    public int getLastTransport() { 
     return lastTransport; 
    } 

    public String getLastTransportName() { 
     return getTransportName(getLastTransport()); 
    } 

    private void setLastTransport(int pLastTransport) { 
     lastTransport = pLastTransport; 
    } 

    private HttpConnection getSimConnection(String pURL, boolean mdsSimulatorRunning) throws IOException { 
     if (DeviceInfo.isSimulator()) { 
      if (mdsSimulatorRunning) { 
       return getConnection(pURL, ";deviceside=false", null); 

      } else { 
       return getConnection(pURL, ";deviceside=true", null); 
      } 
     } 
     return null; 
    } 

    private HttpConnection getBisConnection(String pURL) throws IOException { 
     if (CoverageInfo.isCoverageSufficient(4 /* CoverageInfo.COVERAGE_BIS_B */)) { 
      return getConnection(pURL, ";deviceside=false;ConnectionType=mds-public", null); 
     } 
     return null; 
    } 

    private HttpConnection getBesConnection(String pURL) throws IOException { 
     if (CoverageInfo.isCoverageSufficient(2 /* CoverageInfo.COVERAGE_MDS */)) { 
      return getConnection(pURL, ";deviceside=false", null); 
     } 
     return null; 
    } 

    private HttpConnection getWifiConnection(String pURL) throws IOException { 
     if (WLANInfo.getWLANState() == WLANInfo.WLAN_STATE_CONNECTED) { 

      return getConnection(pURL, ";interface=wifi", null); 

     } 
     return null; 
    } 

    private HttpConnection getWap2Connection(String pURL) throws IOException { 
     if (CoverageInfo.isCoverageSufficient(1 /* CoverageInfo.COVERAGE_DIRECT */) && (srWAP2 != null) && (srWAP2.length != 0)) { 
      return getConnection(pURL, ";deviceside=true;ConnectionUID=", srWAP2[0].getUid()); 
     } 
     return null; 
    } 

    private HttpConnection getTcpConnection(String pURL) throws IOException { 
     if (CoverageInfo.isCoverageSufficient(1 /* CoverageInfo.COVERAGE_DIRECT */)) { 
      return getConnection(pURL, ";deviceside=true", null); 
     } 
     return null; 
    } 

    private HttpConnection getConnection(String pURL, String transportExtras1, String transportExtras2) throws IOException { 
     StringBuffer fullUrl = new StringBuffer(); 
     fullUrl.append(pURL); 
     if (transportExtras1 != null) { 
      fullUrl.append(transportExtras1); 
//   LoadingScreen.tag=transportExtras1; 
     } 
     if (transportExtras2 != null) { 
      fullUrl.append(transportExtras2); 
     } 
     return (HttpConnection) Connector.open(fullUrl.toString()); 
    } 

    public static void reloadServiceBooks() { 
     loadServiceBooks(true); 
    } 

    private static synchronized void loadServiceBooks(boolean reload) { 
     if (serviceRecordsLoaded && !reload) { 
      return; 
     } 
     ServiceBook sb = ServiceBook.getSB(); 
     ServiceRecord[] records = sb.getRecords(); 
     Vector mdsVec = new Vector(); 
     Vector bisVec = new Vector(); 
     Vector wap2Vec = new Vector(); 
     Vector wifiVec = new Vector(); 

     if (!serviceRecordsLoaded) { 
      for (int i = 0; i < records.length; i++) { 
       ServiceRecord myRecord = records[i]; 
       String cid, uid; 

       if (myRecord.isValid() && !myRecord.isDisabled()) { 
        cid = myRecord.getCid().toLowerCase(); 
        uid = myRecord.getUid().toLowerCase(); 
        if ((cid.indexOf("wptcp") != -1) && (uid.indexOf("wap2") != -1) && (uid.indexOf("wifi") == -1) && (uid.indexOf("mms") == -1)) { 
         wap2Vec.addElement(myRecord); 
        } 
       } 
      } 

      srWAP2 = new ServiceRecord[wap2Vec.size()]; 
      wap2Vec.copyInto(srWAP2); 
      wap2Vec.removeAllElements(); 
      wap2Vec = null; 

      serviceRecordsLoaded = true; 
     } 
    } 

    public static int[] transportMaskToArray(int mask) { 
     if (mask == 0) { 
      mask = TRANSPORTS_ANY; 
     } 
     int numTransports = 0; 
     for (int i = 0; i < TRANSPORT_COUNT; i++) { 
      if ((DEFAULT_TRANSPORT_ORDER[i] & mask) != 0) { 
       numTransports++; 
      } 
     } 
     int transports[] = new int[numTransports]; 
     int index = 0; 
     for (int i = 0; i < TRANSPORT_COUNT; i++) { 
      if ((DEFAULT_TRANSPORT_ORDER[i] & mask) != 0) { 
       transports[index++] = DEFAULT_TRANSPORT_ORDER[i]; 
      } 
     } 
     return transports; 
    } 

    private static String getTransportName(int transport) { 
     String tName; 
     switch (transport) { 
     case TRANSPORT_WIFI: 
      tName = "WIFI"; 
      break; 
     case TRANSPORT_BES: 
      tName = "BES"; 
      break; 
     case TRANSPORT_BIS: 
      tName = "BIS"; 
      break; 
     case TRANSPORT_DIRECT_TCP: 
      tName = "TCP"; 
      break; 
     case TRANSPORT_WAP2: 
      tName = "WAP2"; 
      break; 
     case TRANSPORT_SIM: 
      tName = "SIM"; 
      break; 
     default: 
      tName = "UNKNOWN"; 
      break; 
     } 
     return tName; 
    } 

} 

второго класс

/** 
* Copyright (c) E.Y. Baskoro, Research In Motion Limited. 
* 
* Permission is hereby granted, free of charge, to any person 
* obtaining a copy of this software and associated documentation 
* files (the "Software"), to deal in the Software without 
* restriction, including without limitation the rights to use, 
* copy, modify, merge, publish, distribute, sublicense, and/or sell 
* copies of the Software, and to permit persons to whom the 
* Software is furnished to do so, subject to the following 
* conditions: 
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
* OTHER DEALINGS IN THE SOFTWARE. 
* 
* This License shall be included in all copies or substantial 
* portions of the Software. 
* 
* The name(s) of the above copyright holders shall not be used 
* in advertising or otherwise to promote the sale, use or other 
* dealings in this Software without prior written authorization. 
* 
*/ 


public class HttpConnectionFactoryException extends Exception { 

    public HttpConnectionFactoryException(String string) { 
     super(string); 
    } 

    public HttpConnectionFactoryException() { 
     super(); 
    } 

} 

вы просто использовать следующий код для проверки вашего расширения URL-адрес Струнных url = "YOUR actual url"

HttpConnectionFactory factory = new HttpConnectionFactory(0); 
     Httpconnection httpConnection = factory.getHttpConnection(url); 
      if(httpConnection.getResponseCode()==HttpConnection.HTTP_OK){ 
//some of the connection in available 
}else{ 
//no connection available 
}