Ответ 1
Вы даже можете попробовать:
Socket client=new Socket();
client.connect(new InetSocketAddress(hostip,port_num),connection_time_out);
Я пытаюсь установить таймаут соединения на клиентском сокете в java. Я установил тайм-аут подключения по умолчанию к 2000, то есть:
this.socket.connect(this.socketAdd, timeOut);
Это я пытаюсь использовать веб-приложение. Когда пользователь делает запрос, я передаю значения на сервер сокетов, но если я не получаю никакого ответа через 5 секунд, сокет должен отключиться. Но в моем случае весь запрос снова подается. Может ли кто-нибудь рассказать мне, где я ошибаюсь?
Я хочу отключить соединение сокета, если я не получу никакого ответа за 5 секунд. Как я могу установить его? Любой пример кода поможет.
Вы даже можете попробовать:
Socket client=new Socket();
client.connect(new InetSocketAddress(hostip,port_num),connection_time_out);
Чтобы собрать все это вместе:
Socket socket = new Socket();
// This limits the time allowed to establish a connection in the case
// that the connection is refused or server doesn't exist.
socket.connect(new InetSocketAddress(host, port), timeout);
// This stops the request from dragging on after connection succeeds.
socket.setSoTimeout(timeout);
То, что вы показываете, является таймаутом для соединения, это будет тайм-аут, если он не может подключиться в течение определенного времени.
В вашем вопросе подразумевается, что вам нужен тайм-аут для того, когда вы уже подключены и отправите запрос, вы хотите тайм-аут, если в течение определенного промежутка времени нет ответа.
Предполагая, что вы имеете в виду последний, вам нужно отключить socket.read()
, что можно сделать, установив SO_TIMEOUT
с Socket.setSoTimeout(int timeout) метод. Это вызовет исключение, если чтение занимает больше времени, указанного в миллисекундах. Например:
this.socket.setSoTimeout(timeOut);
Альтернативным методом является чтение в потоке, а затем ожидание потока с тайм-аутом и закрытие сокета, если это время.