2013-09-24 4 views
0

Я слежу за официальным Twisted examples о клиенте/сервере. Я использую LineReceiver.sendLine() для отправки текста с клиента на сервер. Этот код работает:Текст не отправляется в Twisted

def connectionMade(self): 
    self.sendLine("Hello, world!") 

, и я вижу это на своей стороне сервера. Но если добавить что-то вроде этого:

def connectionMade(self): 
    while self.running: 
     command = raw_input(">>") 
     if command=="disconnect": 
      self.running = False 
     else: 
      print "sending..." 
      self.sendLine(command) 
      print "sent." 
    self.sendLine("Hello, world!") 

я могу видеть, как «отправки ...» и «послал», но ничего больше. Сервер ничего не получает, даже если клиент отправляет данные. Если я нахожу 'disconnect' все сразу отправляется, в том числе 'Здравствуйте, мир! '

Отсюда мой вопрос: где происходит фактическая отправка? И что делать, чтобы достичь чего-то вроде выше?

+0

@ Jean-PaulCalderone, даже если он дублируется, нет пригодного для использования решения. – alex

+0

Да, есть. Проверьте принятый ответ. Если вы не понимаете этого ответа, прокомментируйте его, спрашивая, что требует уточнения. – Glyph

ответ

0

LineReceiver имеет разделительную разделительную линию. По умолчанию это '\r\n'. Таким образом, протокол ждет, пока он не увидит разделитель, прежде чем записывать данные в сокет.

raw_input() отделяет новую строку от входа, поэтому протокол никогда не видит разделителя.

Итак, попробуйте отправить новую строку '\ r \ n' после команды или добавить ее в переменную command.

+0

это кажется разумным, но, к сожалению, не работает. – alex

Смежные вопросы