Задать вопрос
@c6h12o4

Как сохранять 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, да и как только не извращался, но результат один.
  • Вопрос задан
  • 909 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
@VrencchBug
На сервере должно быть 2 цикла.
Перед accept() тоже должен быть бесконечный цикл, чтобы принимать нового клиента после того, как разобрались со старым.
conn.close() - это завершение не сервера, а клиента ("разобрались со старым").

И вообще-то каждого из них лучше запускать в своем потоке, чтобы они не ждали друг друга. Хотя, это спорный вопрос. Кто-то скажет, что бред. Но если клиентов всего 30, то уж точно жалеть потоков нет смысла.
Но пока это хелловорлд - эта проблема вообще не актуальна.

Но у вас еще столько впереди.
Полноценный код надежного (не вылетающего на первом обрыве) TCP-клиент-сервера раз в 5 длиннее.
Ответ написан
Комментировать
@qyui
У меня ваш код нормально работает. Просто запускать надо не из под Idle, а из командной строки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
25 дек. 2024, в 08:00
20000 руб./за проект
25 дек. 2024, в 07:53
20000 руб./за проект
25 дек. 2024, в 07:45
20000 руб./за проект