В моем проекте для Blackberry 4.5 я создаю HttpConnection через Connector.open. Если я подключаюсь через MDS, я могу указать ConnectionTimeout в дополнительных параметрах для моего URL. Как указать таймауты, если вы используете прямое TCP-соединение или TCP через Wi-Fi?Тайм-аут для Blackberry HttpConnection
ответ
Согласно this KB article, невозможно указать значение тайм-аута соединения для транспортных средств, отличных от MDS.
В некоторых случаях можно использовать 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;
}
}
Согласно официальному документу
При создании (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
- 1. Рекомендации для Blackberry HTTPConnection
- 2. BlackBerry HttpCOnnection
- 3. BlackBerry HttpConnection Содержание URL
- 4. Httpconnection в blackberry
- 5. android httpconnection таймаут не работает
- 6. BlackBerry ConnectionFactory таймаут
- 7. BlackBerry HttpConnection установочные файлы cookie
- 8. Blackberry - HttpConnection using EDGE net
- 9. Ошибка Blackberry HttpConnection на устройстве
- 10. Blackberry HttpConnection для запуска в симуляторе
- 11. Загрузить файл в HttpConnection - BLACKBERRY/JavaME
- 12. Blackberry httpConnection can not handle error 200
- 13. Закрытие Blackberry HttpConnection на тайм-аут
- 14. Ищет проверенные библиотеки для Blackberry или J2ME (HttpConnection)
- 15. Как установить таймаут на HTTPConnection под python 2.4
- 16. HTTPConnection для ежевики, испытывающей прерывистое соединение
- 17. Вызов безопасного соединения с использованием класса HttpConnection - Java ME/Blackberry
- 18. Доступ к Интернету на Blackberry: HttpConnectionFactory и HttpConnection
- 19. BlackBerry - Скачанные изображения повреждены по Wifi с HttpConnection
- 20. Исключение для обработки HttpConnection
- 21. У меня есть вопрос о httpConnection и getResponseCode на BlackBerry
- 22. readUTF таймаут
- 23. Скачивание большого файла над HttpConnection
- 24. Apache Commons HttpConnection: PostMethod - Get Underlying HttpConnection
- 25. Пакет HttpConnection
- 26. java.io.IOException: неправильный DNS-адрес - при открытии HttpConnection
- 27. blackberry image loader
- 28. Невозможно сделать HTTPConnection
- 29. blackberry java webservice error
- 30. J2ME Persistent HttpConnection
Да, я знаю, что это. Какие решения вы используете для решения этой проблемы? –
Вы можете установить TimerTask для выполнения через определенный промежуток времени и проверить, было ли соединение выполнено или нет. Если это не было сделано, просто отмените и продолжите свой другой код (или повторите попытку). –
Также мы можем использовать два потока: один с циклом для ожидания подзаголовка и subthread, где мы пытаемся открыть соединение (или читать данные или smth else). –