Тайм-аут для Blackberry HttpConnection - PullRequest
1 голос
/ 05 марта 2010

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

Ответы [ 3 ]

6 голосов
/ 05 марта 2010

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

3 голосов
/ 09 марта 2010

В некоторых случаях возможно использование 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 голосов
/ 29 мая 2013

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

При установке соединения по протоколу управления передачей (TCP) со смартфона BlackBerry время ожидания соединения по умолчанию составляет 2 минуты. Это значение учитывает возможное время, которое может понадобиться смартфону BlackBerry для предоставления доступа к отправке данных в беспроводной сети, а также для подключения к беспроводной сети через Интернет к серверу назначения и обратно. В некоторых случаях это значение слишком велико. При создании соединения через сокет или протокол передачи гипертекста (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-соединениями или соединениями через шлюз Wireless Application Protocol (WAP). Этот параметр поддерживается только TCP-соединениями, установленными через службу соединений BlackBerry MDS.

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

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

...