1
resposta

[Dúvida] Erro: Foi forçado o cancelamento de uma conexão existente pelo host remoto

Quando tento rodar o código, o seguinte erro é exibido:

Exception in thread "main" java.io.IOException: Foi forçado o cancelamento de uma conexão existente pelo host remoto
    at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:565)
    at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:119)
    at br.com.alura.screenmatch.principal.PrincipalComBusca.main(PrincipalComBusca.java:24)
Caused by: java.io.IOException: Foi forçado o cancelamento de uma conexão existente pelo host remoto
    at java.base/sun.nio.ch.SocketDispatcher.read0(Native Method)
    at java.base/sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
    at java.base/sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:276)
    at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:233)
    at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:223)
    at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:358)
    at java.net.http/jdk.internal.net.http.SocketTube.readAvailable(SocketTube.java:1153)
    at java.net.http/jdk.internal.net.http.SocketTube$InternalReadPublisher$InternalReadSubscription.read(SocketTube.java:821)
    at java.net.http/jdk.internal.net.http.SocketTube$SocketFlowTask.run(SocketTube.java:175)
    at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:198)
    at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:271)
    at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:224)
    at java.net.http/jdk.internal.net.http.SocketTube$InternalReadPublisher$InternalReadSubscription.signalReadable(SocketTube.java:763)
    at java.net.http/jdk.internal.net.http.SocketTube$InternalReadPublisher$ReadEvent.signalEvent(SocketTube.java:941)
    at java.net.http/jdk.internal.net.http.SocketTube$SocketFlowEvent.handle(SocketTube.java:245)
    at java.net.http/jdk.internal.net.http.HttpClientImpl$SelectorManager.handleEvent(HttpClientImpl.java:957)
    at java.net.http/jdk.internal.net.http.HttpClientImpl$SelectorManager.lambda$run$3(HttpClientImpl.java:912)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
    at java.net.http/jdk.internal.net.http.HttpClientImpl$SelectorManager.run(HttpClientImpl.java:912)

Process finished with exit code 1

Como posso resolver?

1 resposta

Ola,

O erro que você está vendo sugere que a conexão entre o que você está tentando fazer no seu código Java e o servidor foi cortada de repente pelo servidor.

Uma das causas mais comuns para esse tipo de erro é o tempo limite (timeout) de conexão. Isso ocorre quando a conexão demora muito para ser estabelecida ou quando não há resposta do servidor dentro do tempo limite configurado. Você pode aumentar o tempo limite da sua requisição HTTP. No Java, você pode fazer isso ao construir sua requisição utilizando a classe HttpClient.

import java.net.http.HttpClient;
import java.time.Duration;

public class SuaClasse {
    public static void main(String[] args) {
        HttpClient httpClient = HttpClient.newBuilder()
                .connectTimeout(Duration.ofSeconds(10)) // Definindo timeout de 10 segundos
                .build();

        // Seu código de requisição aqui...
    }
}

Dê uma olhada no seu código para garantir que tudo esteja fechando corretamente, como conexões e recursos.

Pode ser que um firewall ou algo de segurança esteja atrapalhando a conversa entre o seu código e o servidor. Vale a pena dar uma olhada nisso também.

Vlw!