1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| import threading
import socket
from string import split
dictclients = {}
class Client(threading.Thread):
def __init__(self, socketclient):
threading.Thread.__init__(self)
self.clisock = socketclient
self.EndMarker='*End*'
def newConnect(self):
NewClient = self.clisock.recv(500)
if NewClient in dictclients.keys():
self.clisock.send('Nok')
else:
self.clisock.send('Ok')
NewType = self.clisock.recv(1)
self.clisock.send('Ok')
NewPass = self.clisock.recv(500)
self.cliname = NewClient.strip()
self.clipass = NewPass.strip()
self.clitype = NewType.strip()
dictclients[self.cliname] = (self.clipass, self.clitype, self.clisock, self)
self._stopevent = threading.Event()
def returnclilist(self):
_deadclients = []
for keys, values in dictclients.iteritems():
print keys, values
if values[2] != self.clisock:
try:
values[2].send('test')
except socket.error, e:
_deadclients.append(keys)
for clients in _deadclients:
dictclients[clients][3].stop()
del dictclients[clients]
retstr = ''
for elems in dictclients.keys():
if len(elems) < 11:
elem = elems + (' ' * (11 - len(elems)))
retstr = retstr + elem + dictclients[elems][1]
self.clisock.send(retstr)
print dictclients
def run(self):
self.newConnect()
while not self._stopevent.isSet():
try:
buff = self.clisock.recv(20)
except:
buff = ''
if 'ListeClient' in buff:
self.returnclilist()
self._stopevent.wait(2.0)
self.clisock.close()
# Le try pour :
#Traceback (most recent call last):
# File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner
# self.run()
# File "alivesvr.py", line 56, in run
# buff = self.clisock.recv(20)
# File "/usr/lib/python2.6/socket.py", line 167, in _dummy
# raise error(EBADF, 'Bad file descriptor')
#error: [Errno 9] Bad file descriptor
# A gerer plus tard
def stop(self):
self._stopevent.set()
if __name__ == "__main__":
svrsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
svrsocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
try:
svrsocket.bind(('',8000))
except ValueError, e:
print e
svrsocket.listen(5)
while True:
(socketclient, addr) = svrsocket.accept()
ct = Client(socketclient)
ct.start() |
Partager