2017-02-17 1 views
0

Je suis nouveau à la programmation Socket, et j'essaye d'écrire une application de chat simple. Mon serveur utilise un HashSet de Strings pour stocker les informations de nom d'utilisateur et je veux passer le HashSet du serveur au client. J'étais capable de faire ceci avant avec ObjectOutputStream et ObjectInputStream au-dessus des douilles régulières. Cependant, maintenant je me sers SocketChannel et il ne permet pas cela, je reçois l'exception suivante:Écrire et lire des objets sur Java NIO non bloquant SocketChannels

java.nio.channels.IllegalBlockingModeException 

donc j'ai cherché sur le web sur la façon de le faire et tout le monde dit quelque chose de différent, et la plupart vont bien au-dessus de ma tête. Y a-t-il une manière simple de faire ceci sans complètement surcharger les méthodes writeObject et readObject moi-même?

Merci d'avance.

+0

c'est possible: c'est aussi trop dur. Restez en mode bloquant. – EJP

+0

@EJP Lol merci, je dois le faire en non-bloquant dans le cadre de ma classe de programmation réseau. – mks

Répondre

1

Je vous recommande de ne pas utiliser le mode non bloquant ou de ne pas utiliser la sérialisation.

Si vous devez, vous devez sérialiser à ByteArrayOutputStream, obtenir la longueur, envoyer la longueur, envoyer les octets, recevoir la longueur, continuer à lire, accumuler des données jusqu'à ce que vous avez la bonne longueur de données, le mettre dans un ByteArrayInputStream, et désérialiser de cela. Pas facile, surtout la main qui fait le tour «continue à lire». Et cela gaspille du temps et de l'espace.

+0

Merci, Est-ce que personne n'a un modèle générique de ceci écrit quelque part? vous penseriez que c'est un problème commun. – mks

+0

La question a déjà été posée ici. – EJP

+0

je veux dire une sorte de classe ou de méthode qui utilise des génériques Java pour gérer cela. – mks