rendered paste body#!/usr/bin/env python
# file: tmp.py
import sys, time
import threading, socket, select
ipinfo = ('localhost', 55555)
sendata = ['=======', 'you ', 'are', 'pig!', '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'
print id(self.srv)
self.srv.poll()# 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:
print id(self.client)
self.client.poll()
print 'clinet recved notify'
recvstr = self.socketid.recv(64)
print 'recv --> %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 ================='