Я установил таймаут для сокета, который действителен, если значение меньше 21 секунды, и через 21 секунду я обнаружил, что тайм-аут все еще составляет 21 секунду
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
String time1= sdf.format(new Date());
System.out.println(time1);
try {
Socket sock = new Socket();
SocketAddress socketAddress = new InetSocketAddress("128.28.28.28",80);
sock.connect(socketAddress,60000);
}catch (Exception ex){
ex.printStackTrace();
}finally {
time1= sdf.format(new Date());
System.out.println(time1);
}
}
Запуск этого кода долженВремя ожидания истекает через 60 секунд, но время ожидания истекает примерно через 21 секунду. Но если вы измените эти 60 000 на 5000, вы увидите, что на самом деле оно истекло через пять секунд. Я подозреваю, что время ожидания сокета по умолчанию составляет всего 21 секунду, ноЯ не могу найти доказательства. Я хочу найти доказательства и знать, что я должен сделать, чтобы заставить его пройти 60 секунд вместо 21. этот хост: 128.28.28.28 - это несуществующий адрес. Мой вопрос, почему я установилТайм-аут до 60 sconds, но он был превышен через 21 секунду.
Ошибка:
java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at
com.dongbawen.hppa.biz.rulemstrecipe.Send_Class.main (Send_Class.java:49)