<p>线程并不像你想象的那么难,掌握它是你工具箱中一个无价的补充。在</p>
<p>只需创建一个作为Thread子类的类,并确保它具有run()方法。然后实例化该类并调用其start()方法。在</p>
<p>使线程停止是更难做正确的。最好设置一个标志,并确保在while循环中定期检查它,因此blocking recv()需要一个超时,比如1秒。在</p>
<pre><code>from socket import *
from threading import Thread
#Get User Info
Ip = raw_input('IP>>>')
Port = int(raw_input('Port>>>'))
User = raw_input('Username>>>')
#Open Socket To Server
EncCon = socket(AF_INET, SOCK_STREAM)
EncCon.connect((Ip, Port))
print '\nStarting Chat....'
print '\n< >\n\n'
class ReceiveThread(Thread):
def __init__(self, sock):
Thread.__init__(self)
self.sock = sock
self.shouldstop = False
def run(self):
self.sock.settimeout(1)
while not self.shouldstop:
try:
data = self.sock.read()
print data
except socket.timeout:
continue
def stop(self):
self.shouldstop = True
# start receive loop:
r = ReceiveThread(EncCon).start()
#Send Loop
while 1:
MsgOut = raw_input()
if MsgOut: EncCon.send(MsgOut)
if MsgOut == '.':
r.stop()
r.join()
EncCon.close()
</code></pre>
<p>现在,这个程序仍然有一个最初的问题,那就是不可能启动两个实例,因为你不听,而是立即连接。但我相信这不是你问题的主要部分。在</p>