Java - Écouter un socket avec ObjectInputStream
Ok, donc , j'ai une classe thread appelé "Client" à chaque fois que le serveur accepte la connexion, il crée un nouveau Client....La méthode run de l'écoute des messages de la part du client et je suis a ObjectInputStream ..
do {
ObjectInputStream in = null;
try {
in = new ObjectInputStream(socket.getInputStream());
String message = (String) in.readObject();
System.out.println(message);
}
catch (ClassNotFoundException ex) {
isConnected = false;
System.out.println("Progoramming Error");
}
catch (IOException ex) {
isConnected = false;
System.out.println("Server ShutDown");
System.exit(0);
}
} while(isConnected);
Le Problème que j'ai c'est que pourquoi dois-je créer un nouveau ObjectInputStream chaque fois qu'il fait une boucle...et si je ferme le flux d'entrée à la fin de la boucle et en boucle à nouveau pour un autre message, je vais avoir une erreur...s'il vous Plaît quelqu'un de l'aide
Vous n'avez pas à, et vous ne devriez pas.
Et d'obtenir une ClassNotFoundException est ni une indication que vous n'êtes plus connecté, ni une erreur de programmation. Il indique un déploiement d'erreur.
Pourriez-vous passé quelles erreurs avez-vous et il serait également utile si vous avez affiché le code du client.
Et d'obtenir une ClassNotFoundException est ni une indication que vous n'êtes plus connecté, ni une erreur de programmation. Il indique un déploiement d'erreur.
Pourriez-vous passé quelles erreurs avez-vous et il serait également utile si vous avez affiché le code du client.
isConnected()
n'est pas un test valide pour une connexion active. La connexion est en place jusqu'à ce que vous lisez la fin du flux, ou un IOException
autres que SocketTimeoutException
se produit.OriginalL'auteur MurWade | 2011-08-11
Vous devez vous connecter pour publier un commentaire.
Seulement de créer de la ObjectInputStream une fois (en dehors de la boucle) pour un client de connexion, puis mettre la méthode readObject dans la boucle.
Voici un travail de la classe de test:
Dans cet exemple, les Chaînes de caractères sont envoyés à travers le ObjectStream. Si vous obtenez le ClassNotFoundException (http://download.oracle.com/javase/6/docs/api/java/io/ObjectInputStream.html#readObject()) et utilisez un client indépendant et programme de serveur que vous pourriez vérifier si le client et le serveur ont la classe de l'objet à envoyer dans leur classe des chemins.
Je l'ai essayé et ça n'a pas fonctionné ....
Le sommeil est inutile, et que la lecture de la boucle doit attraper
EOFException
et de sortir de la lecture de la boucle quand ils sont pris. Tous les autresIOExceptions
saufSocketTimeoutException
sont aussi fatale à la connexion et de sortir de la lecture de la boucle. Le support doit être fermée après la lecture de la boucle s'arrête pour une raison quelconque. Trop de mauvaises pratiques ici.Ne sera pas le même objet à lire plusieurs fois? Dans le ClientHandler? Ou est-il une sorte d'auto-fonction à l'intérieur de ObjectInputStream qui l'empêche de se produire? Pourquoi cette boucle pas lire le même objet plusieurs fois?
OriginalL'auteur kvDennis