Странный код. Вы создаете буфер, читаете в нем один байт, затем анализируете этот байт, а затем повторяете весь процесс. Один байт, конечно, не занимает много разбор. Вы никогда не проверяете -1 из чтения, так что этот цикл будет бесконечно вращаться, когда узел отключается. И, наконец, Socket.isConnected () не является полезным тестом, и, в частности, он не обнаруживает отключение однорангового узла.