Python цикл while
У меня есть вот такой простой код и в нем два цикла для того чтобы при отключении клиента он мог подключится обратно но я хочу чтобы по команде exit полностью завершился весь скрипт но 1 цикл просто не даст этого сделать, что можно сдеалать и изменить чтобы можно было завершить скрипт или завершить сразу 2 цикла
def start_anigilation():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '127.0.0.1'
port = 4444
server.bind((host, port))
server.listen(2)
while True:
try:
client, addr = server.accept()
print(client)
while True:
message = client.recv(1024).decode('utf-8')
if message == 'user-exit':
break
elif message == 'hi':
print(message)
client.send('Hello'.encode('utf-8'))
else:
break
except:
break
Код клиента
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '127.0.0.1'
port = 4444
client.connect((host, port))
def main():
commands = str(input('>>> ')).encode('utf-8')
if commands == 'exit':
raise SystemExit
elif commands == 'user-exit':
client.send('user-exit'.encode('utf-8'))
else:
pass
main()
Ответы (1 шт):
Автор решения: Daniil Loban
→ Ссылка
Вместо True в верхнем цикле заводим переменную server_running с значением True, перед break переводим ее в False
def start_anigilation():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '127.0.0.1'
port = 4444
server.bind((host, port))
server.listen(2)
server_running = True
while server_running:
try:
client, addr = server.accept()
print(client)
while True:
message = client.recv(1024).decode('utf-8')
if message == 'user-exit':
server_running = False
break
elif message == 'hi':
print(message)
client.send('Hello'.encode('utf-8'))
else:
break
except:
break
В приведеном коде клиента есть ошибка в строке:
commands = str(input('>>> ')).encode('utf-8')
Дело в том что произведя энкодинг тут мы не получим четкого сравнения в условии:
commands == 'user-exit':
По этой причине энкодинг при вводе делать не стоит.
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '127.0.0.1'
port = 4444
client.connect((host, port))
def main():
commands = str(input('>>> '))
if commands == 'exit':
raise SystemExit
elif commands == 'user-exit':
client.send('user-exit'.encode('utf-8'))
else:
pass
main()