2010-08-28 12 views
1

Je tente d'exécuter un thread qui va à un socket, attrape le flux d'entrée et le lit. Im créer des centaines de ces threads et ont défini le délai d'attente pour la lecture et pourtant le fil reste toujours à la ligne read().java inputStream Freezing

public void readPack() { 

socket.setSoTimeout(4*1000); 

if (socket.isConnected()) { 


    buffer parse = new buffer(); 
    parse.addByte((byte) skt.getInputStream().read()); 
    parseIncoming(parse); 
} 


} catch (Exception e) {} 

} 
+0

Il n'y a pas assez d'informations ici pour deviner quel est le problème. – msw

Répondre

0

Appel skt.available(), puis appeler lu que plusieurs fois, ou utilisez skt.read(byte[]). Autre sage skt.read() va bloquer. Le délai d'expiration de votre paramètre est de se connecter à la socket, et non un délai d'attente de lecture.

+0

Le délai d'expiration défini est un délai d'attente de lecture et non un délai d'attente de connexion. – EJP

1

Code étrange. Vous créez un tampon, y lisez un octet, puis analysez cet octet, puis répétez l'ensemble du processus. Un octet ne prend sûrement pas beaucoup d'analyse. Vous ne vérifiez jamais -1 depuis la lecture afin que cette boucle tourne indéfiniment lorsque l'homologue se déconnecte. Et enfin Socket.isConnected() n'est pas un test utile, et en particulier il ne détecte pas la déconnexion de l'homologue.

+0

le temps est supposé être un si, juste en essayant de ramasser un octet – koolaid2345

+0

Il est toujours faux, voir ci-dessus. – EJP