TCP - это потоковый протокол.Таким образом, передаваемые данные являются потоком, а не последовательностью сообщений.Поэтому, когда вы ожидаете, что data
будет q
, на самом деле это some_data_sent_before_q_and_finally_q
.
Самый простой способ исправить код - использовать if data.endswith('q')
вместо if data=='q'
.Может работать, а может и не зависеть от того, как вы на самом деле используете соединение.Например, этот подход может дать сбой с some_data_sent_before_q
довольно длинной паузой more_data_and_q
и с some_data_sent_before_q_and_finally_q_plus_something_else_why_not
.
Немного более продвинутым способом решения проблемы является разделение потока на сообщения с разделителями - message_1<separator>message_2<separator>q<separator>
.Этот метод позволит вам обрабатывать каждое сообщение отдельно.