Как сохранять socket-соединение в Python? Решил сделать чат на Python 2.7. Код клиента:import socket message = raw_input('> ') sock = socket.socket() sock.connect(('127.0.0.1', 9090)) sock.send(message) data = sock.recv(1024) sock.close() print data и сервера:import socket sock = socket.socket() sock.bind(('', 9090)) sock.listen(1) conn, addr = sock.accept() print 'Connected: ', addr while True: data = conn.recv(1024) if not data: break print addr, 'sent a message: ', data conn.send(data.upper()) conn.close() Одно сообщение проходит отлично. После чего сервер и клиент закрываются. Я пытался закомментировать conn.close, да и как только не извращался, но результат один.
Для сохранения соединения между клиентом и сервером вам необходимо добавить цикл в клиентский код, чтобы он оставался открытым и мог продолжать общение с сервером.
Пример исправленного клиентского кода:
import socket sock = socket.socket() sock.connect(('127.0.0.1', 9090)) while True: message = raw_input('> ') sock.send(message) data = sock.recv(1024) print data sock.close()
Теперь клиент будет оставаться подключенным к серверу и сможет отправлять сообщения и получать ответы от сервера.
Также не забудьте исправить ошибку в серверном коде - необходимо добавить цикл для ожидания и обработки новых соединений:
import socket sock = socket.socket() sock.bind(('', 9090)) sock.listen(1) while True: conn, addr = sock.accept() print 'Connected: ', addr while True: data = conn.recv(1024) if not data: break print addr, 'sent a message: ', data conn.send(data.upper()) conn.close()
Теперь сервер также остается открытым и может обработать несколько соединений от разных клиентов.
Для сохранения соединения между клиентом и сервером вам необходимо добавить цикл в клиентский код, чтобы он оставался открытым и мог продолжать общение с сервером.
Пример исправленного клиентского кода:
import socketsock = socket.socket()
sock.connect(('127.0.0.1', 9090))
while True:
message = raw_input('> ')
sock.send(message)
data = sock.recv(1024)
print data
sock.close()
Теперь клиент будет оставаться подключенным к серверу и сможет отправлять сообщения и получать ответы от сервера.
Также не забудьте исправить ошибку в серверном коде - необходимо добавить цикл для ожидания и обработки новых соединений:
import socketsock = socket.socket()
sock.bind(('', 9090))
sock.listen(1)
while True:
conn, addr = sock.accept()
print 'Connected: ', addr
while True:
data = conn.recv(1024)
if not data:
break
print addr, 'sent a message: ', data
conn.send(data.upper())
conn.close()
Теперь сервер также остается открытым и может обработать несколько соединений от разных клиентов.