2011-04-12 35 views
28

Estoy tratando de establecer el tiempo de espera de una conexión en el socket del cliente en java. He configurado un tiempo de espera de conexión predeterminado para 2000, es decir:¿Cómo establecer el tiempo de espera en la conexión de socket del cliente?

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 zócalo, si no obtengo ninguna respuesta en 5 segundos. ¿Cómo puedo configurarlo? Cualquier código de muestra ayudaría.

Respuesta

16

Lo que se muestra es un tiempo de espera para la conexión, este tiempo de espera se agota si no se puede conectar en un tiempo determinado.

Su pregunta implica que desea un tiempo de espera para cuando ya esté conectado y envíe una solicitud, desea esperar hasta que no haya respuesta dentro de un cierto período de tiempo.

Suponiendo que se refiere a esto último, entonces necesita esperar el socket.read() que se puede hacer configurando 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 hilo, y luego esperar en el hilo con un tiempo de espera y cerrar el enchufe si timesout.

34

incluso Usted puede tratar de:

Socket client=new Socket(); 
client.connect(new InetSocketAddress(hostip,port_num),connection_time_out); 
+2

Esto me ayudó a un tiempo de espera cuando no existe el servidor, o se niega conexión. – anisbet

+0

por cierto, 'connection_time_out' está en milisegundos – lightswitch05

17

Para poner todo junto:

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