Сервер в каждом цикле принимает нового клиента, отправляет одно сообщение, получает одно сообщение и отключает клиента. Затем он ждет другого клиента.
Вам нужен еще один цикл для обработки клиента.
Чтобы другой цикл мог быть помещен в другой поток.
Если вы вложите этот цикл в этот цикл, вы сможете одновременно обрабатывать только одного клиента. Я изменил ваш сервер так:
def server(address, port):
sock = socket(AF_INET, SOCK_STREAM)
sock.bind((address, port))
sock.listen(10)
while True: # server loop
clientsock, addr = sock.accept()
ip, _ = addr
msg = "Hello to client from %s" % ip
# next line is here because your client need message from server to send message
clientsock.send(bytes(msg, 'utf-8'))
while True: # client loop
data = clientsock.recv(2048)
msg = '%s - %s' % (ip, data.decode('utf-8'))
print(msg)
if not data:
break
clientsock.send(bytes(msg, 'utf-8')) # for multiple clients you need send msg to all
clientsock.shutdown(SHUT_WR)
clientsock.close()
sock.close()
Для обработки нескольких клиентов вы не хотите блокировать цикл сервера, пока цикл клиента не закончится. Вы можете запустить цикл клиента в другом потоке и продолжить ожидание следующего клиента clientsock, addr = sock.accept()
.
Точно так же вы можете отделить получение сообщений от сервера и ожидание ввода от клиента.