В Java сокет, запрашивающий веб-страницу, всегда отключается

Можете ли вы поместиться для вызова этого метода:

  await Task.Factory.StartNew(
        () => { /* to do what you need */ }, 
        CancellationToken.None, /* you can change as you need */
        TaskCreationOptions.None, /* you can change as you need */
        customScheduler);
1
задан Overv 21 July 2010 в 22:45
поделиться

4 ответа

Вам нужно проверить заголовок длины содержимого, возвращаемый сервером. Прочтите только это количество байтов, а затем закройте соединение после этого.

Вы ждете, пока сервер закроет соединение, поэтому это занимает 20 секунд.

1
ответ дан 2 September 2019 в 22:51
поделиться

я могу бросить прерывание в блоке catch после чтения

0
ответ дан 2 September 2019 в 22:51
поделиться

readLine ожидает новой строки, которую сервер никогда не отправляет

0
ответ дан 2 September 2019 в 22:51
поделиться

Действие (пере) закрашивания экрана выполняется тем же потоком, который отвечает за чтение содержимого объекта чтения. Это классический пример использования многопоточности, чтобы на рендеринг экрана не влиял процесс чтения ответа.

РЕДАКТИРОВАТЬ: На основании полученных комментариев поведение можно объяснить тем фактом, что и клиент, и сервер должны выполнять операции очистки, когда сокет внезапно закрывается. Проще говоря, клиент, похоже, не читает все данные из входного потока, и, следовательно, для JVM и, следовательно, ОС требуется гораздо больше времени, чем обычно, для выполнения соответствующих операций, которые фактически освобождают ресурсы, что приводит к очевидной блокировке. некоторого разнообразия. Так что совет, предоставленный другими по использованию URL / URLConnection, в этом случае очень актуален.

1
ответ дан 2 September 2019 в 22:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: