2010-01-06 4 views
0

J'ai un programme Java connecté au serveur via le protocole xot.Gestion des dépassements de délai réseau en Java

Ma bibliothèque peut gérer le délai d'attente de connexion, mais il n'existe aucune méthode comme setSoTimeout() pour gérer le délai d'attente lors de l'envoi de & données recv. Donc, n'importe qui pourrait me suggérer une solution à ce problème.

grâce

Quan

Répondre

0

Une option consiste à frayer un thread pour l'écriture et join(timeout) il. De même avec la lecture de la connexion. Évidemment, tuez le thread (et traitez la connexion comme dans un état indéterminé) lorsque le timeout expire (par opposition au die dieing).

+0

ok, merci pour votre suggestion :) – QuanNH

+0

comment tuer le thread de manière sûre lorsque send/recv timeout? – QuanNH

+0

peut-être que je crée une nouvelle question: D – QuanNH

0

'Socket.setSoTimeout()' devrait également s'appliquer à recv. Voir ses javadoc.

setSoTimeout public void (timeout int) lance SocketException

Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds. 

Avec cette option sur un délai d'attente non nul , une lecture() appel à la InputStream associée à ce Socket bloquera pour seulement ce montant de temps. Si le délai d'attente expire, une exception java.net.SocketTimeoutException est déclenchée, bien que le paramètre Socket soit toujours valide. L'option doit être activée avant d'entrer dans l'opération de blocage pour avoir un effet. Le délai doit être> 0. Un délai d'attente de zéro est interprété comme un délai d'attente infini.

+0

mon protocole est xot (x25 sur tcp/ip) et j'utilise d'autres lib pour ce protocole, pas d'utilisation java socket (mais similaire: D) – QuanNH