Вам все еще нужно лучше понять, как работает сокет прослушивания:
- он слушает только один раз
- он принимает только один раз на соединение
- он может читать и отправлять столько пакетов, сколько потребуется, пока одна из сторон не закроет соединение
- в этой точке (и для однопоточного сервера) он готов принять новое соединение
Ваш server.py должен стать:
...
s.bind(('', port))
print ("socket binded to %s" %(port))
# put the socket into listening mode
s.listen(20)
print ("socket is listening")
# a forever loop until we interrupt it or
# an error occurs
while True:
# Establish connection with client.
c, addr = s.accept()
print('Got connection from', addr)
while True:
msg = c.recv(1024).decode()
if len(msg) == 0: # the client does not send anything but just closes its side
# Close the connection with the client
c.close()
print('Client disconnected')
break
else:
print ("[SERVER]: Recieved data: ", msg)
print ("[SERVER]: sending", msg)
c.send((msg).encode())
Небольшое исправление для клиентской стороны:
...
if msg != "quit":
s.send((msg).encode())
else:
# close the connection
s.close()
break # break out of the loop after closing connection
Но это еще не все: TCP является потоковый протокол. Вы должны быть готовы к тому, что пакеты, отправленные с одной стороны, будут разделены или повторно собраны до того, как они достигнут другой стороны. Единственная гарантия состоит в том, что байты поступают в том же порядке, в котором они были отправлены, но не обязательно в тех же пакетах.