java - servidor - ¿Cómo establecer el tiempo de espera en la conexión de socket del cliente?
sockets ejemplo java (3)
Estoy tratando de establecer el tiempo de espera de una conexión en el socket del cliente en java. Establecí un tiempo de espera de conexión predeterminado para 2000, es decir:
this.socket.connect(this.socketAdd, timeOut);
Esto estoy intentando en una aplicación web. Cuando un usuario realiza una solicitud, estoy transfiriendo valores al servidor socket, pero si no recibo ninguna respuesta en 5 segundos, el socket debería desconectarse. Pero en mi caso, la solicitud completa se enviará una vez más. ¿Puede alguien decirme por favor dónde me estoy equivocando?
Quiero cortar la conexión del socket, si no recibo ninguna respuesta en 5 segundos. ¿Cómo puedo configurarlo? Cualquier código de muestra ayudaría.
Incluso puedes intentar por:
Socket client=new Socket();
client.connect(new InetSocketAddress(hostip,port_num),connection_time_out);
Lo que muestra es un tiempo de espera para la conexión, este tiempo expirará si no se puede conectar dentro de un cierto tiempo.
Su pregunta implica que desea un tiempo de espera para cuando ya esté conectado y envíe una solicitud; desea agotar el tiempo de espera si no hay respuesta dentro de un cierto período de tiempo.
Suponiendo que quiere decir lo último, entonces necesita socket.read()
el socket.read()
que se puede hacer estableciendo SO_TIMEOUT
con el método Socket.setSoTimeout (int timeout) . Esto generará una excepción si la lectura lleva más tiempo que la cantidad de milisegundos especificada. Por ejemplo:
this.socket.setSoTimeout(timeOut);
Un método alternativo es hacer la lectura en un subproceso, y luego esperar en el subproceso con un tiempo de espera y cerrar el socket si se agota el tiempo de espera.
Para poner todo en orden:
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);