Salut J'essaie de mettre en œuvre un serveur Java NIO simple; qui enregistre le socketChannel avec le sélecteur. Par conséquent, je souhaite écouter le client et envoyer une réponse en retour. Après que le socketChannel est enregistré avec le sélecteur, même si le client (non NIO) envoie des données, le serveur n'est pas capable de lire; howerver la clé générée est toujours itérée.Le serveur NIO ne peut pas écouter le client
détaillée: Côté serveur:
**First thread**:
public void run() { while (true) {
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.configureBlocking(true);
serverSocketChannel.socket().bind(inetAdressOfServer);
SocketChannel clientChannel = serverSocketChannel.accept();
new Listener("").addSocketChannel(clientChannel);
}}
**Second Thread**:
static Selector selector = Selector.open();
public boolean addSocketChannel(SocketChannel clientChannel) {
SelectionKey key = clientSocketChannel.register(selector, selector.OP_READ|SelectionKey.OP_WRITE);
key.attach(new ChannelCallback(clientSocketChannel));
return key.isValid();
}
public void run() {
Set keysSet = selector.keys();
Iterator i = keysSet.iterator();
while (i.hasNext()) {
SelectionKey key = (SelectionKey) i.next();
}
if (key.isReadable()) {
//read and do something
}
}
Client Side:
Socket socket = new Socket(serverIP, serverPort);
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos.writeBytes(str + "\n");
NB: Lorsque vous avez terminé en fil unique, le même programme fonctionne, mais Lorsqu'elle est mise en œuvre de la manière mentionnée ci-dessus, elle ne doit pas écouter le client. S'il vous plaît aidez-moi à résoudre ce problème.
Je me demande à chaque fois que de nos jours, les gens utilisent encore le style d'écriture Java-1.4 de 6 ans pour les itérateurs. Les anciens livres et tutoriels Java sont-ils encore si répandus? Ça me rend triste. –