How to make a simple command-line chat in Python?
<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>
