Quando eu crio um soquete:
Socket socket = new Socket(ipAddress, port);
Ele lança uma exceção, que está OK, porque o endereço IP não está disponível. (As variáveis de teste onde String ipAddress = "192.168.0.3"
e int port = 300
.)
O problema é: como faço para definir o tempo limite para esse soquete?
Quando eu crio o soquete, como reduzo o tempo antes de obter um UnknownHostException
e fazer com que o soquete atinja o tempo limite?
Respostas:
Use o
Socket()
construtor e oconnect(SocketAddress endpoint, int timeout)
método .No seu caso, seria algo como:
Socket socket = new Socket(); socket.connect(new InetSocketAddress(ipAddress, port), 1000);
Citando da documentação
fonte
socket.setSoTimeout(timeoutMillis)
tempos limite durante o bloqueio de operações de E / S.Você não define um tempo limite para o soquete, você define um tempo limite para as operações executadas naquele soquete.
Por exemplo
socket.connect(otherAddress, timeout)
Ou
socket.setSoTimeout(timeout)
para definir um tempo limite nasread()
operações.Veja: http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html
fonte
socket.setSoTimeout
deve ser chamado DEPOISconnect
ou não terá efeito e as leituras nunca expirarão. este é um problema mal documentado.Você pode usar a seguinte solução:
SocketAddress sockaddr = new InetSocketAddress(ip, port); // Create your socket Socket socket = new Socket(); // Connect with 10 s timeout socket.connect(sockaddr, 10000);
Espero que ajude!
fonte
connect()
método, mas não sob o controle de um tempo limite.Você não pode controlar o tempo limite devido a
UnknownHostException
. Estes são tempos de DNS. Você só pode controlar o tempo limite de conexão em um host válido. Nenhuma das respostas anteriores aborda esse ponto corretamente.Mas acho difícil acreditar que você está realmente recebendo um
UnknownHostException
quando especifica um endereço IP em vez de um nome de host.EDITAR Para controlar os tempos limite de DNS do Java, consulte esta resposta .
fonte
Use o construtor padrão para Socket e, em seguida, use o método connect () .
fonte