Quand je crée un socket:
Socket socket = new Socket(ipAddress, port);
Il lève une exception, ce qui est OK, car l'adresse IP n'est pas disponible. (Les variables de test où String ipAddress = "192.168.0.3"
et int port = 300
.)
Le problème est le suivant: comment définir le délai d'expiration pour ce socket?
Quand je crée le socket, comment puis-je réduire le temps avant d'obtenir un UnknownHostException
et d'obtenir le délai d'expiration du socket?
Utilisez la méthode Socket()
) et méthode connect(SocketAddress endpoint, int timeout)
.
Dans votre cas, cela ressemblerait à quelque chose comme:
Socket socket = new Socket();
socket.connect(new InetSocketAddress(ipAddress, port), 1000);
Citant de la documentation
connect
public void connect(SocketAddress endpoint, int timeout) throws IOException
Connecte ce socket au serveur avec une valeur de délai d'expiration spécifiée. Une temporisation de zéro est interprétée comme une temporisation infinie. La connexion sera alors bloquée jusqu'à ce qu'elle soit établie ou qu'une erreur survienne.
Paramètres:
endpoint
- le SocketAddresstimeout
- la valeur de délai d'attente à utiliser en millisecondes.Lance:
IOException
- si une erreur survient pendant la connexionSocketTimeoutException
- si le délai d'attente expire avant la connexionIllegalBlockingModeException
- si ce socket a un canal associé et que le canal est en mode non bloquantIllegalArgumentException
- si le noeud final est null ou s'il s'agit d'une sous-classe SocketAddress non prise en charge par ce socketDepuis: 1.4
Vous ne définissez pas de délai d'expiration pour le socket, vous définissez un délai d'expiration pour les opérations que vous effectuez sur ce socket.
Par exemple, socket.connect(otherAddress, timeout)
Ou socket.setSoTimeout(timeout)
pour définir un délai d'expiration pour les opérations read()
.
Voir: http://docs.Oracle.com/javase/7/docs/api/Java/net/Socket.html
Vous pouvez utiliser la solution suivante:
SocketAddress sockaddr = new InetSocketAddress(ip, port);
// Create your socket
Socket socket = new Socket();
// Connect with 10 s timeout
socket.connect(sockaddr, 10000);
J'espère que ça aide!
Vous ne pouvez pas contrôler le délai d'attente en raison de UnknownHostException
. Ce sont des timings DNS. Vous pouvez uniquement contrôler le délai de connexion avec un hôte valide. Aucune des réponses précédentes n'aborde ce point correctement.
Mais j'ai du mal à croire que vous obtenez réellement un UnknownHostException
lorsque vous spécifiez une adresse IP plutôt qu'un nom d'hôte.
[~ # ~] edit [~ # ~] Pour contrôler les délais d’exécution du DNS de Java voir cette réponse .
Utilisez le constructeur par défaut pour Socket, puis utilisez la méthode connect () .