Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Network
  • » s.recv(1024) как сделать чтоббы программа не висела если сокет пуст? [RSS Feed]

#1 Янв. 29, 2011 18:47:15

metnek
От:
Зарегистрирован: 2010-11-15
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

s.recv(1024) как сделать чтоббы программа не висела если сокет пуст?

Вот к примеру
конечусь на порт 9100
и пытаюсь прочитать
text=s.recv(1024)
а на той стороне
если есть хоть что нить то он его прочитает и вывидет мне на экран
print (text)
но что делать если сокет пуст?
Если при этом клиент висит ожидая ответа что нужно дописать чтобы клиент продолжал работу!
Суть такова клиент подрубился если на серваке нету слово гуд то тогда он мне соощает что слова нет и я завершил работу а если есть то пишет что слово гуд есть?
спс всем! :)))



Офлайн

#2 Янв. 29, 2011 19:17:59

Eliont
От:
Зарегистрирован: 2010-05-30
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

s.recv(1024) как сделать чтоббы программа не висела если сокет пуст?

Использовать неблокирующие сокеты.
Тогда при чтении прога не повиснет, а сгенерирует исключение которое можно перехватить и либо заигнорить либо повесить собственный обработчик.



Офлайн

#3 Янв. 29, 2011 19:35:20

metnek
От:
Зарегистрирован: 2010-11-15
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

s.recv(1024) как сделать чтоббы программа не висела если сокет пуст?

Eliont
Использовать неблокирующие сокеты.
Тогда при чтении прога не повиснет, а сгенерирует исключение которое можно перехватить и либо заигнорить либо повесить собственный обработчик.
Подскажите как ? Всмысле что я должен вписать! Плиз :)



Офлайн

#4 Янв. 30, 2011 06:22:43

Eliont
От:
Зарегистрирован: 2010-05-30
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

s.recv(1024) как сделать чтоббы программа не висела если сокет пуст?

Сокет делается неблокирующим методом .setblocking(0)

После этого обрабатывать надо примерно так:

        try:
sock, addr = socket_object.accept()
connect = True
except socket.error:
connect = False
continue
Покури руководства: http://www.intuit.ru/department/pl/python/9/,
потом посмотри мой старый курсовик: http://dl.dropbox.com/u/11931230/ouvs_cource_work_report.doc
И ещё соседнюю темку: http://python.su/forum/viewtopic.php?id=10108



Отредактировано (Янв. 30, 2011 06:23:30)

Офлайн

  • Начало
  • » Network
  • » s.recv(1024) как сделать чтоббы программа не висела если сокет пуст?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version