¿Por qué no se bloquea el método de lectura de mi socket?
1. Cuando llamas a read, en realidad llamas al método de lectura de socketchannel, y el modo de bloqueo que configuras es el modo ServerSocketChannel, por lo que el método de bloqueo predeterminado aún se usará cuando llames a read. Si desea utilizar un método sin bloqueo, simplemente configure el modo de bloqueo de socketchannel y estará bien. 2. De forma predeterminada, el método de lectura está en modo de bloqueo, por lo que no hay forma de establecer su tiempo de espera. Si el cliente sale de manera anormal, la conexión actual esperará para siempre. Si lo cambia al modo sin bloqueo, no tendrá. este problema. En el modo sin bloqueo, puede juzgar el valor de retorno de lectura. Si el valor de retorno es siempre 0 más de N veces, cierre la conexión actual. 3. Nunca lo he mezclado de esta manera y nunca he encontrado tal problema. Supongo que puede estar relacionado con el canal del zócalo cerrado, el zócalo, etc. Puede haber alguna diferencia entre cerrar el zócalo y cerrar el canal. De todos modos, no estoy seguro. Se recomienda que si desea NIO, use NIO. Si desea serversocket y socket, utilice solo estos dos y trate de no mezclarlos. Espero que ayude.