Ваша проблема вызвана кодом Python, который никогда не отправляет команду "пока".
Ошибка в коде Python:
Ваш код Python циклически изменяется от 0 (включительно) до 3 (исключая), так как 3 исключается, код никогда не переходит в блок "пока" и никогда не отправляет это. (напечатайте x, чтобы подтвердить это)
Поместите код "пока" после цикла.
for x in range(0, 3):
sock.sendall(b"{}\n".format(dict.get(x)))
print(dict.get(x))
print(sock.recv(1024))
sock.sendall("Bye\n")
print(sock.recv(1024))
Ошибка в коде Java
Да, в коде Java также есть ошибка, в основном из-за того, что он неправильно обрабатывает закрытие потока.
Когда программа Python закрывается в конце кода, Java-программа получит чистый выход, это без исключения способ закрытия сокета, и в результате readLine
вернет нулевое значение.
Это значение NULL вызывает следующее исключение:
Exception in thread "Thread-0" java.lang.NullPointerException
Поскольку значение null
означает, что сокет закрыт, вы также можете передать его как правильный «пока» ответ или как условие ошибки.
if (fromClient == null || fromClient.equals("Bye")) {