Как установить тайм-аут на соединение сокетов клиента?

Я пытаюсь установить таймаут соединения на клиентском сокете в java. Я установил тайм-аут подключения по умолчанию к 2000, то есть:

this.socket.connect(this.socketAdd, timeOut);

Это я пытаюсь использовать веб-приложение. Когда пользователь делает запрос, я передаю значения на сервер сокетов, но если я не получаю никакого ответа через 5 секунд, сокет должен отключиться. Но в моем случае весь запрос снова подается. Может ли кто-нибудь рассказать мне, где я ошибаюсь?

Я хочу отключить соединение сокета, если я не получу никакого ответа за 5 секунд. Как я могу установить его? Любой пример кода поможет.

3 ответа

Вы даже можете попробовать:

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);

Альтернативным методом является чтение в потоке, а затем ожидание потока с тайм-аутом и закрытие сокета, если это время.

licensed under cc by-sa 3.0 with attribution.