Blackberry HttpConnection超时

Blackberry HttpConnection超时,blackberry,timeout,connection,Blackberry,Timeout,Connection,在我的黑莓4.5项目中,我通过Connector.open创建了HttpConnection。如果我通过MDS连接,我可以在URL的附加参数中指定ConnectionTimeout。如果使用直接TCP连接或TCP over WiFi,如何指定超时?根据,无法为MDS以外的传输指定连接超时值。根据,无法为MDS以外的传输指定连接超时值。在某些情况下,可以使用和选项: public class HTTPSocketConnector { static public String getHt

在我的黑莓4.5项目中,我通过Connector.open创建了HttpConnection。如果我通过MDS连接,我可以在URL的附加参数中指定ConnectionTimeout。如果使用直接TCP连接或TCP over WiFi,如何指定超时?

根据,无法为MDS以外的传输指定连接超时值。

根据,无法为MDS以外的传输指定连接超时值。

在某些情况下,可以使用和选项:

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

在某些情况下,可以使用和选项:

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;
    }
}
根据官方文件

从BlackBerry智能手机建立传输控制协议TCP连接时,默认连接超时为2分钟。此值考虑了允许黑莓智能手机访问无线网络以发送数据,以及连接通过互联网通过无线网络传输到目标服务器并再次返回可能需要的时间。在某些情况下,此值太长。通过BlackBerry®移动数据系统BlackBerry MDS连接服务进行套接字或超文本传输协议HTTP连接时,可以将超时值设置为低于BlackBerry MDS连接服务中配置的值。默认情况下,该值为2分钟。无法超出服务器上配置的限制。使用ConnectionTimeout参数指定超时值。此参数接受以毫秒为单位的数值。以下是超时值为1分钟的HTTP连接示例:

StreamConnections=StreamConnectionConnector.open; HttpConnection httpConn=HttpConnections

注意:直接TCP连接或通过无线应用程序协议WAP网关的连接不支持ConnectionTimeout参数。只有通过BlackBerry MDS连接服务建立的TCP连接支持此参数

请查看官方BB链接

根据官方文件

从BlackBerry智能手机建立传输控制协议TCP连接时,默认连接超时为2分钟。此值考虑了允许黑莓智能手机访问无线网络以发送数据,以及连接通过互联网通过无线网络传输到目标服务器并再次返回可能需要的时间。在某些情况下,此值太长。通过BlackBerry®移动数据系统BlackBerry MDS连接服务进行套接字或超文本传输协议HTTP连接时,可以将超时值设置为低于BlackBerry MDS连接服务中配置的值。默认情况下,该值为2分钟。无法超出服务器上配置的限制。使用ConnectionTimeout参数指定超时值。此参数接受以毫秒为单位的数值。以下是超时值为1分钟的HTTP连接示例:

StreamConnections=StreamConnectionConnector.open; HttpConnection httpConn=HttpConnections

注意:直接TCP连接或通过无线应用程序协议WAP网关的连接不支持ConnectionTimeout参数。只有通过BlackBerry MDS连接服务建立的TCP连接支持此参数

请查看官方BB链接


您可以将TimerTask设置为在一段时间后执行,并检查连接是否已建立。如果尚未创建,则只需中止并继续执行其他代码或重试。此外,我们可以使用两个线程:一个线程带有循环,用于等待子线程,另一个线程用于尝试打开连接或读取数据或smth其他。您可以设置一个TimerTask以在一段时间后执行,并检查连接是否已建立。如果还没有创建,则只需中止并继续使用其他代码或重试。此外,我们可以使用两个线程:一个线程带有循环,用于等待子线程,另一个线程用于尝试打开连接或读取数据或smth其他线程。