web-dev-qa-db-fra.com

Comment définir le délai d'expiration sur la connexion socket client?

J'essaie de définir le délai d'expiration d'une connexion sur le socket client en Java. J'ai défini un délai de connexion par défaut à 2000, c'est-à-dire:

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

J'essaye ceci sur une application Web. Lorsqu'un utilisateur fait une demande, je transmets des valeurs au serveur de socket, mais si je ne reçois aucune réponse dans 5 secondes, le socket doit se déconnecter. Mais dans mon cas, toute la demande est de nouveau soumise. Quelqu'un peut-il me dire où je me trompe?

Je veux couper la connexion socket, si je n'obtiens aucune réponse dans 5 secondes. Comment puis-je le régler? Tout exemple de code serait utile.

34
Vardhaman

Vous pouvez même essayer:

Socket client=new Socket();   
client.connect(new InetSocketAddress(hostip,port_num),connection_time_out); 
42
xyz

Pour assembler le tout:

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

Ce que vous montrez est un délai d'expiration pour la connexion, ce délai expirera s'il ne peut pas se connecter dans un certain délai.

Votre question implique que vous souhaitez un délai d'expiration lorsque vous êtes déjà connecté et envoyez une demande, vous souhaitez expirer s'il n'y a pas de réponse dans un certain laps de temps.

En supposant que vous pensez à ce dernier, vous devez alors expirer la socket.read() ce qui peut être fait en définissant SO_TIMEOUT avec la méthode Socket.setSoTimeout (int timeout) . Cela lèvera une exception si la lecture prend plus de temps que le nombre de millisecondes spécifié. Par exemple:

this.socket.setSoTimeout(timeOut);

Une autre méthode consiste à effectuer la lecture dans un thread, puis à attendre le thread avec un délai d'expiration et à fermer le socket s'il expire.

18
Jim Morris