title: How to make a simple command-line chat in Python?
body: <p>I study network programming and would like to write a simple command-line chat in Python.</p>
  
  <p>I'm wondering how make receving constant along with inputing available for sending at any time. </p>
  
  <p>As you see, this client can do only one job at a time:</p>
  
  <pre><code>from socket import *
  
  HOST = 'localhost'
  PORT = 21567
  BUFSIZE = 1024
  ADDR = (HOST, PORT)
  
  tcpCliSock = socket(AF_INET, SOCK_STREAM)
  tcpCliSock.connect(ADDR)
  
  while 1:
      data = raw_input('&gt; ')
      if not data: break
      tcpCliSock.send(data)
      data = tcpCliSock.recv(BUFSIZE)
      if not data: break
      print data
  
  tcpCliSock.close()
  </code></pre>
  
  <p>So if another client sends a message, this client will only receive it after sending a message too. I bet you understand me. I have googled for the matter and found out many interesting things such as asynchronous I/O, threading, non-blocking synchronization, concurrent programming and so on. I have also installed the twisted package. In brief, I've been learning all these things but yet haven't found what I was looking for. (Of course, I will keep trying and trying until I get to the point.)</p>
  
  <p>So, my question is how make that? =)  </p>