J'essaie de lire des éléments d'une socket et je remarque que s'il n'y a rien sur le flux de la socket, il restera à la lecture et sauvegarder mon application. Je voulais savoir s'il y avait un moyen de définir un délai de lecture ou de mettre fin à la connexion après un certain laps de temps de rien dans le socket.Comment temporiser une lecture sur Java Socket?
Répondre
Oui, il doit y avoir un remplacement de Read() qui accepte une valeur de délai d'expiration. En "override" je ne suggère personne écrire un, je souligne que l'un des substitutions des méthodes de socket qu'il utilise prend une valeur de délai.
Si vous écrivez Java, apprendre à naviguer the API documentation est utile. Dans le cas d'une lecture de socket, vous pouvez set the timeout option.
Si cette prise a été créé par un URLConnection
pour effectuer une requête Web, vous pouvez régler la lecture et connecter les délais d'attente directement sur la URLConnection
avant de lire le flux:
InputStream createInputStreamForUriString(String uriString) throws IOException, URISyntaxException {
URLConnection in = new URL(uriString).openConnection();
in.setConnectTimeout(5000);
in.setReadTimeout(5000);
in.setAllowUserInteraction(false);
in.setDoInput(true);
in.setDoOutput(false);
return in.getInputStream();
}
'setReadTimeout' ne provoquera une exception, si le délai expire * avant * la réception des premières données. Après la réception des premières données, aucune exception de dépassement de délai ne se produira même si la connexion se bloque à l'infini. – ooxi
@ooxi C'est complètement faux. Le délai d'attente de lecture s'applique à chaque lecture, pas seulement au premier. – EJP
- 1. Comment arrêter une opération de lecture sur une socket?
- 2. Comment instancier une classe Socket en Java?
- 3. meilleure stratégie pour temporiser une transaction/session?
- 4. écoute sur socket UDP
- 5. Java: lecture de données POST à partir d'une socket sur un serveur HTTP
- 6. Java: la reconnexion sur un socket donne parfois une erreur
- 7. Application client/serveur basée sur une socket Java SSL
- 8. Comment modifier les autorisations sur une socket?
- 9. Java Socket Testing
- 10. Erreur de lecture du socket C#
- 11. Itération d'une lecture() à partir d'une socket
- 12. Java: Lecture depuis ObjectInputStream
- 13. setSoTimeout sur un socket client n'affecte pas le socket
- 14. Java Socket Programmation
- 15. Socket opération sur non-socket
- 16. Java TCP Socket reniflage
- 17. Comment dire de façon fiable lorsque vous avez terminé la lecture d'une socket en Java?
- 18. java socket issue
- 19. Programmation Java Socket
- 20. Comment créer un socket Java uniquement localhost?
- 21. Java Socket Disconnect Reporting vs. C# Disconnection
- 22. Socket Programmation en Java
- 23. Java - Socket - Freeze
- 24. comportement de socket à la lecture
- 25. Lecture à partir de la socket
- 26. Programmation de socket en Java
- 27. passer le socket natif winsock au socket java
- 28. En utilisant Java 6, sur linux, comment puis-je m'assurer d'utiliser une socket ipv4?
- 29. Comment puis-je obtenir un flux d'erreur sur une socket en Java?
- 30. java socket et l'authentification proxy
Et vous ne lisez pas directement à partir d'une socket de toute façon, vous obtenez un 'InputStream' de la socket, puis lisez à partir de cela. Faites ce que @erikson dit, utilisez 'setSoTimeout()'. – krock
non il ne devrait pas. Cela rendrait l'API 'SocketInputStream' différente des autres flux. Il existe déjà un moyen de le faire qui ne rompt pas la substituabilité 'InputStream'. –