# chatserver2.py
import socket

class server1 :
   def __init__(self, (socket, address) ):
      self.SOCKET=socket
      self.ADDRESS=address

   def run(self) :
      print 'Connected ', self.ADDRESS 
      while True :
         From=self.SOCKET.recv(1024) # Read from client
         if not From : break
         self.SOCKET.send(From)
      self.SOCKET.close()
      print 'Disconnected ', self.ADDRESS
s = socket.socket(socket.AF_INET, 
                          socket.SOCK_STREAM)
s.bind(('', 888))
s.listen(1)

while True :                 # Wait for connection/run server
   server( s.accept() ).run(); 


# chatserver3.py

import socket, threading

class server3(threading.Thread) :
   def __init__(self, (socket, address) ):
      threading.Thread.__init__(self)
      self.SOCKET=socket
      self.ADDRESS=address

   def run(self) :
      print 'Connected ', self.ADDRESS
      while True :
         From=self.SOCKET.recv(1024) # Read from client
         if not From : break
         self.SOCKET.send(From)
         self.SOCKET.close()
      print 'Disconnected ', self.ADDRESS

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 888))
s.listen(4)

while True :                 # Wait for connection/run server
   server3( s.accept() ).start();