fun main(args: Array<String>) {
val selector = Selector.open()
val sc = SocketChannel.open()
sc.configureBlocking(false)
sc.connect(InetSocketAddress(1234))
val key = sc.register(selector, SelectionKey.OP_CONNECT)
println("key=$key")
key.attach(ClientAttachment())
writeThread(sc)
while (selector.isOpen) {
if (selector.select() == 0) continue
val keys = selector.selectedKeys().iterator()
while (keys.hasNext()) {
val key = keys.next()
println("key=$key")
println("ac=${key.attachment()}")
keys.remove()
if (key.isConnectable) {
val c = key.channel() as SocketChannel
while (!c.finishConnect()) {
Thread.sleep(100)
}
println("连接服务器成功")
c.register(selector, SelectionKey.OP_READ)
} else if (key.isReadable) {
handleRead(key)
}
}
}
}
Je crée un SocketChannel et l'enregistre dans un sélecteur, puis attacher un objet à la clé. Lorsque je reçois le premier événement OP_CONNECT, je peux obtenir la pièce jointe avec succèsy a-t-il un bug sur selectionKey.attachment() dans java nio?
mais lors de l'événement OP_READ suivant, la pièce jointe() renvoie null?
pourquoi?
Vous pouvez inclure une balise indiquant la langue que vous utilisez. – matt
J'imprime la touche, cela montre que la clé est la même. – Tony
Quelle ligne semble causer le problème? –