97 votes

Jeu de délai d'attente pour la prise

Lorsque je crée une socket:

Socket socket=new Socket(ipAddress, port);

Elle lève une exception, ce qui est normal car l'Adresse IP n'est pas disponible.(ipAddress est l'exemple de Chaîne de "192.168.0.3" et port = 300 est de type int ).

Mon problème est de savoir comment dois-je le mettre en attente pour ce socket?

Quand j'ai créer ce socket, comment puis-je réduire le temps avant que je reçois un UnknownHostException et obtenir le support de délai d'attente.

181voto

aioobe Points 158466

Utiliser l' Socket() constructeur, et connect(SocketAddress endpoint, int timeout) méthode de la place.

Dans votre cas, il ressemblerait à quelque chose comme:

Socket socket = new Socket();
socket.connect(new InetSocketAddress(ipAddress, port), 1000);

Citant à partir de la documentation

connect

public void connect(SocketAddress endpoint, int timeout) throws IOException

Connecte ce socket vers le serveur avec une valeur de délai d'expiration. Un délai d'attente de zéro est interprété comme une infinité de délai d'attente. La connexion sera alors bloqué jusqu'à ce qu'établi ou une erreur se produit.

Paramètres:

endpoint - la SocketAddress
timeout - la valeur de délai d'expiration pour être utilisé en millisecondes.

Jette:

IOException - si une erreur survient lors de la connexion
SocketTimeoutException - si le délai expire avant la connexion
IllegalBlockingModeException - si cette prise est associé à un canal, et le canal est en mode sans blocage
IllegalArgumentException - si le point de terminaison est null ou est un SocketAddress sous-classe non pris en charge par cette prise

Depuis: 1.4

48voto

payne Points 5933

Vous n'avez pas de définir un délai d'attente pour la prise, vous pouvez définir un délai d'attente pour les opérations que vous effectuez sur ce socket.

Par exemple socket.connect(otherAddress, timeout)

Ou socket.setSoTimeout(timeout) , pour le réglage d'une temporisation d' read() des opérations.

Voir: http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html

21voto

reef Points 926

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

Espérons que cela aide!

9voto

EJP Points 113412

Vous ne pouvez pas contrôler le délai d'attente en raison d' UnknownHostException. Ce sont les DNS de timing. Vous pouvez seulement contrôler le délai de connexion donné un hôte valide. Aucune des réponses précédentes adresses de ce point correctement.

Mais j'ai du mal à croire que vous êtes vraiment obtenir un UnknownHostException lorsque vous spécifiez une adresse IP plutôt qu'un nom d'hôte.

EDIT De contrôle de Java DNS délais d'expiration de voir cette réponse.

8voto

Sjoerd Points 34671

Utiliser le constructeur par défaut pour le Socket, puis utiliser la méthode connect() .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X