2010-03-05 9 views
1

Dans mon projet pour Blackberry 4.5, je crée HttpConnection via Connector.open. Si je me connecte via MDS, je peux spécifier ConnectionTimeout dans des paramètres supplémentaires à mon URL. Comment puis-je spécifier des délais d'attente si j'utilise une connexion TCP directe ou TCP via WiFi?Timeout pour Blackberry HttpConnection

Répondre

6

Selon this KB article, il n'est pas possible de spécifier une valeur de délai de connexion pour les transports autres que MDS.

+0

Oui, je le sais. Quelles solutions utilisez-vous pour résoudre ce problème? –

+0

Vous pouvez définir une TimerTask à exécuter après un certain temps et vérifier si la connexion a été établie ou non. Si cela n'a pas été fait, abandonnez et continuez avec votre autre code (ou réessayez). –

+0

Nous pouvons également utiliser deux threads: l'un avec la boucle pour le sous-thread en attente, et le sous-thread où nous essayons d'ouvrir la connexion (ou de lire les données ou smth else). –

3

Dans certains cas, il est possible d'utiliser Http over Socket et SocketConnectionEnhanced avec READ_TIMEOUT Option:

public class HTTPSocketConnector 
{ 

    static public String getHtml(String url, long timeout) 
    { 

     String response = ""; 
     try 
     { 
      String host = getHostUrl(url); 
      String page = getPageUrl(url); 
      SocketConnectionEnhanced hc = 
       (SocketConnectionEnhanced)Connector.open("socket://" 
        + host + ":80"); 
      hc.setSocketOptionEx(SocketConnectionEnhanced.READ_TIMEOUT, 
       timeout); 
      DataOutputStream dout = new DataOutputStream(
        ((SocketConnection)hc).openOutputStream()); 
      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
      String request = "GET /" + page + " HTTP/1.1\r\n" + "Host: " 
       + host + ":80\r\n" + "User-Agent: MIDP2.0\r\n" 
       + "Content-Type: text/html\r\n\r\n"; 
      bos.write(request.getBytes()); 
      dout.write(bos.toByteArray()); 
      dout.flush(); 
      dout.close();    
      InputStream is = ((SocketConnection)hc).openInputStream(); 
      byte[] bytes = null;    
      bytes = IOUtilities.streamToBytes(is); 
      is.close(); 
      response = new String(bytes, "UTF-8"); 
     } 
     catch(Exception e) 
     { 
      response = e.getMessage(); 
     } 
     return response; 
    } 

    private static String getPageUrl(String url) 
    { 
     String result = url; 
     if(result.indexOf("//") != -1) 
     { 
      result = result.substring(result.indexOf("//") 
       + "//".length(), result.length()); 
     } 

     if(result.indexOf("/") != -1) 
     { 
      result = result.substring(result.indexOf("/") 
       + "/".length(), result.length()); 
     } 
     return result; 
    } 

    private static String getHostUrl(String url) 
    { 
     String result = url; 

     if(result.indexOf("//") != -1) 
     { 
      result = result.substring(result.indexOf("//") 
       + "//".length(), result.length()); 
     } 

     if(result.indexOf("/") != -1) 
     { 
      result = result.substring(0, result.indexOf("/")); 
     } 
     return result; 
    } 
} 
0

Comme par document officiel

lors d'une connexion Transmission Control Protocol (TCP) à partir d'un smartphone BlackBerry, le délai de connexion par défaut est de 2 minutes. Cette valeur prend en compte le temps nécessaire à un smartphone BlackBerry pour accéder à l'envoi de données sur le réseau sans fil et pour que la connexion passe par le réseau sans fil via Internet vers le serveur de destination et vice-versa. Dans certaines circonstances, cette valeur est trop longue. Lors de la création d'une connexion socket ou HTTP (Hypertext Transfer Protocol) via le service de connexion BlackBerry® Mobile Data System (BlackBerry MDS), il est possible de définir une valeur inférieure à la valeur configurée dans BlackBerry MDS Connection Service . Par défaut, la valeur est 2 minutes. Il n'est pas possible de dépasser la limite configurée sur le serveur. Utilisez le paramètre ConnectionTimeout pour spécifier la valeur du délai d'expiration. Ce paramètre accepte une valeur numérique en millisecondes. Voici un exemple de connexion HTTP avec une valeur de délai d'attente de 1 minute:

StreamConnection s = (StreamConnection) Connector.open ("http://myserver.com/mypage.html;ConnectionTimeout=60000;deviceside=false"); HttpConnection httpConn = (HttpConnection) s;

Remarque: Le paramètre ConnectionTimeout n'est pas pris en charge par les connexions TCP directes ou les connexions via une passerelle WAP (Wireless Application Protocol). Seules les connexions TCP, effectuées via BlackBerry MDS Connection Service, prennent en charge ce paramètre.

S'il vous plaît voir le lien BB officiel

http://supportforums.blackberry.com/t5/Java-Development/Control-the-connection-timeout-for-TCP-connections-through-the/ta-p/445851