#!/usr/bin/env python from sys import stdout, exit from socket import socket, AF_INET, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR, getservbyname from threading import Thread from time import sleep from string import strip finger_port = getservbyname("finger", "tcp") class finger_client(Thread): def __init__(self, user): Thread.__init__(self) self.user = user def run(self): sock = socket(AF_INET, SOCK_STREAM) sock.connect(("localhost",finger_port)) file = sock.makefile("r+") file.write(self.user + "\n") file.flush() print strip(file.readline()) class finger_server(Thread): def __init__(self): Thread.__init__(self) def run(self): max_queued_connections=5 listen = socket(AF_INET, SOCK_STREAM) listen.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) listen.bind(("", finger_port)) listen.listen(max_queued_connections) while 1: (conn, peer) = listen.accept() finger_handler(conn).start() class finger_handler(Thread): def __init__(self, conn): Thread.__init__(self) self.file = conn.makefile("r+") self.db = { "sam":"a naughty boy", "fabian":"a nuff-nuff", "danny":"a heffalump", } def run(self): file = self.file name = strip(file.readline()) msg = name + " is " + self.db.get(name, "unknown") file.write(msg + "\n") file.close() finger_server().start() sleep(0.2) finger_client("sam").start() finger_client("fabian").start() finger_client("danny").start() finger_client("bert").start()