Когда я создаю сокет:
Socket socket = new Socket(ipAddress, port);
Это вызывает исключение, что нормально, потому что IP-адрес недоступен. (Тестовые переменные где String ipAddress = "192.168.0.3"
и int port = 300
.)
Проблема в следующем: как мне установить тайм-аут для этого сокета?
Когда я создаю сокет, как мне сократить время до того, как я получу UnknownHostException
и заставлю сокет истечь время ожидания?
Ответы:
Вместо этого используйте
Socket()
конструктор иconnect(SocketAddress endpoint, int timeout)
метод .В вашем случае это будет выглядеть примерно так:
Socket socket = new Socket(); socket.connect(new InetSocketAddress(ipAddress, port), 1000);
Цитата из документации
источник
socket.setSoTimeout(timeoutMillis)
тайм-ауты при блокировании операций ввода-вывода.Вы не устанавливаете тайм-аут для сокета, вы устанавливаете тайм-аут для операций, которые вы выполняете на этом сокете.
Например
socket.connect(otherAddress, timeout)
Или
socket.setSoTimeout(timeout)
для установки тайм-аутаread()
операций.См .: http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html
источник
socket.setSoTimeout
должно вызываться ПОСЛЕconnect
, иначе это не будет иметь никакого эффекта и время чтения никогда не истечет. это одна плохо задокументированная ошибка.Вы можете использовать следующее решение:
SocketAddress sockaddr = new InetSocketAddress(ip, port); // Create your socket Socket socket = new Socket(); // Connect with 10 s timeout socket.connect(sockaddr, 10000);
Надеюсь, это поможет!
источник
connect()
методом, но не по таймауту.Вы не можете контролировать тайм-аут из-за
UnknownHostException
. Это тайминги DNS. Вы можете контролировать время ожидания подключения только при наличии допустимого хоста. Ни один из предыдущих ответов не касается этого вопроса правильно.Но мне трудно поверить, что вы действительно получаете,
UnknownHostException
когда указываете IP-адрес, а не имя хоста.ИЗМЕНИТЬ Чтобы контролировать тайм-ауты DNS Java, см. Этот ответ .
источник
Используйте конструктор по умолчанию для Socket, а затем используйте метод connect () .
источник