title: Twisted chat client only receives message directly after sending a message?
body: <p>I am writing a simple command line chat program with the Twisted framework. In three separate command lines I have opened my chat server and two clients (see code below). </p>
  
  <p>The problem I am having is that if I send a message from one client the next client won't receive it. However once that other client sends its own message it receives the message from the other client. Hope this is clear.</p>
  
  <p>Thanks</p>
  
  <p>Server:</p>
  
  <pre><code>from twisted.protocols import basic
  
  class MyChat(basic.LineReceiver):
      def connectionMade(self):
          print "Got new client!"
          self.factory.clients.append(self)
  
      def connectionLost(self, reason):
          print "Lost a client!"
          self.factory.clients.remove(self)
  
      def lineReceived(self, line):
          data = repr(line)
          print data
          for c in self.factory.clients:
              c.message(data)
  
      def message(self, message):
          self.transport.write(message + '\r\n')
  
  
  
  from twisted.internet import reactor, protocol
  from twisted.application import service, internet
  
  factory = protocol.ServerFactory()
  factory.protocol = MyChat
  factory.clients = []
  reactor.listenTCP(8042, factory)
  reactor.run()
  </code></pre>
  
  <p>Client:</p>
  
  <pre><code>from twisted.protocols import basic
  
  
  # a client protocol
  
  class EchoClient(basic.LineReceiver):
  
      def sendData(self):
          data = raw_input("&gt; ")
          if data:
              print "sending %s...." % data
              self.transport.write(data + "\r\n")
          else:
              self.transport.loseConnection()
  
      def connectionMade(self):
          self.username = raw_input("Name: ")
          self.sendData()
  
      def lineReceived(self, data):
          print data
          self.sendData()
  
      def connectionLost(self, reason):
          print "connection lost"
  
  class EchoFactory(protocol.ClientFactory):
      protocol = EchoClient
  
      def clientConnectionFailed(self, connector, reason):
          print "Connection failed - goodbye!"
          reactor.stop()
  
      def clientConnectionLost(self, connector, reason):
          print "Connection lost - goodbye!"
          reactor.stop()
  
  
  # this connects the protocol to a server runing on port 8000
  def main():
      f = EchoFactory()
      reactor.connectTCP("localhost", 8042, f)
      reactor.run()
  
  # this only runs if the module was *not* imported
  if __name__ == '__main__':
      main()
  </code></pre>