2010-03-05 3 views
1

В моем проекте для Blackberry 4.5 я создаю HttpConnection через Connector.open. Если я подключаюсь через MDS, я могу указать ConnectionTimeout в дополнительных параметрах для моего URL. Как указать таймауты, если вы используете прямое TCP-соединение или TCP через Wi-Fi?Тайм-аут для Blackberry HttpConnection

ответ

6

Согласно this KB article, невозможно указать значение тайм-аута соединения для транспортных средств, отличных от MDS.

+0

Да, я знаю, что это. Какие решения вы используете для решения этой проблемы? –

+0

Вы можете установить TimerTask для выполнения через определенный промежуток времени и проверить, было ли соединение выполнено или нет. Если это не было сделано, просто отмените и продолжите свой другой код (или повторите попытку). –

+0

Также мы можем использовать два потока: один с циклом для ожидания подзаголовка и subthread, где мы пытаемся открыть соединение (или читать данные или smth else). –

3

В некоторых случаях можно использовать Http over Socket и SocketConnectionEnhanced с READ_TIMEOUT вариант:

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

Согласно официальному документу

При создании (TCP) соединение по протоколу управления передачей от смартфона BlackBerry, таймаут соединения по умолчанию составляет 2 минуты. Это значение учитывает возможное время, когда смартбуру BlackBerry может быть предоставлен доступ для отправки данных в беспроводной сети, а также для подключения к беспроводной сети через Интернет на конечный сервер и обратно. В некоторых случаях это значение слишком велико. При подключении сокета или HTTP-соединения через HTTP-соединение BlackBerry® Mobile Data System (BlackBerry MDS) можно установить значение тайм-аута на меньшее значение, чем значение, настроенное в службе подключения к BlackBerry MDS , По умолчанию значение равно 2 минутам. Невозможно выйти за пределы, установленные на сервере. Используйте параметр ConnectionTimeout, чтобы указать значение таймаута. Этот параметр принимает числовое значение в миллисекундах. Ниже приведен пример подключения HTTP со значением тайм-аута 1 минута:

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

Примечание: Параметр ConnectionTimeout не поддерживается прямыми TCP-соединениями или соединениями через шлюз беспроводного приложения (WAP). Этот параметр поддерживает только TCP-соединения, выполненные через BlackBerry MDS Connection Service.

Пожалуйста, обратитесь к официальной ссылке BB

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

Смежные вопросы