All pastes #112708 Raw Edit

lavi

public text v1 · immutable
·published 2006-08-03 03:57 UTC
rendered paste body
#!/usr/bin/env python
# file: tmp.py

import sys, time
import threading, socket, select

ipinfo = ('localhost', 55555)
sendata =  ['=======', 'you ', 'are', 'girl!', 'bye']

class ServThread(threading.Thread):
    def __init__(self, socketid):
        threading.Thread.__init__(self)
        self.socketid = socketid
        self.fileno = socketid.fileno()
        self.event = None
        self.srv = None
    def run(self):
        self.srv = select.poll()
        print '** created serv poll object'
        try:
            self.srv.register(self.fileno, select.POLLIN | select.POLLOUT | select.POLLHUP)
        except:
            print '======= Error 1 ===='
            self.srv.unregister(self.socketid)
            sys.exit(0)
        print '** registered srv ...'
        self.socketid.bind(ipinfo)
        print '** binded ...'
        self.socketid.listen(1)
        print '** listened and waitting client...'
        self.event = self.srv.poll()
        print '** svr polled'
        conn, addr = self.socketid.accept()
        print '** accepted %s...' % str(addr)
        try:
            while 1:
                conn.send('** Request sending data now')
                print '** send to client'
                self.srv.poll(50)# blocked here ?
                print '** polled in connected status'
                recvdata = conn.recv(64)
                if recvdata == 'bye':
                    print '** Exit now'
                    break
                else:
                    print '** Received --> %s ' % recvdata
        finally:
            self.socketid.close()
            print '** closed in srv'
        pass

class ClientThread(threading.Thread):
    def __init__(self, socketid):
        threading.Thread.__init__(self)
        self.socketid = socketid
        self.fileno = socketid.fileno()
        self.event = None
        self.client = None
    def run(self):
        print 'Run after ClientThread created'
        self.client = select.poll()
        print 'created client poll object'
        try:
            self.client.register(self.fileno, select.POLLOUT | select.POLLIN | select.POLLHUP)
        except:
            print '======= Error 2 ===='
            self.client.unregister(self.socketid)
            sys.exit(0)
        print 'registered client ...'
        print 'Now connect to server ...'
        self.socketid.connect(ipinfo)
        print 'server connected...'
        try:
            print "Iterating"
            time.sleep(2)
            for data in sendata:
                self.client.poll()
                print 'clinet recved notify'
                recvstr = self.socketid.recv(64)
                print '\trecv --> %s' % recvstr
                self.socketid.send(data)
                print 'notify to svr'
        finally:
            self.socketid.close()
            print 'closed in client'

mainsock1 = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
mainsock1.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
mainsock2 = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
mainsock2.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
mainsock1.settimeout(10)
mainsock2.settimeout(10)

aa1 = ServThread(mainsock1)
aa1.setDaemon(True)
aa1.start()

ClientThread(mainsock2).start()

print '================ Testing Start ================='