self.descriptors = [self.srvsock] print 'ChatServer started on port %s' % port
def run( self ):
while 1: # Await an event on a readable socket descriptor (sread, swrite, sexc) = select.select( self.descriptors, [], [] )
# Iterate through the tagged read descriptors for sock in sread: # Received a connect to the server (listening) socket if sock == self.srvsock: self.accept_new_connection() else: # Received something on a client socket str = sock.recv(100) # Check to see if the peer socket closed if str == '': host,port = sock.getpeername() str = 'Client left %s:%s/r/n' % (host, port) self.broadcast_string( str, sock ) sock.close self.descriptors.remove(sock) else: host,port = sock.getpeername() newstr = '[%s:%s] %s' % (host, port, str) self.broadcast_string( newstr, sock )
def accept_new_connection( self ): if debug: print'accept new connection...' newsock, (remhost, remport) = self.srvsock.accept() self.descriptors.append( newsock ) newsock.send("You're connected to the Python chatserver/r/n") str = 'Client joined %s:%s/r/n' % (remhost, remport) self.broadcast_string( str, newsock )
def broadcast_string( self, str, omit_sock ): for sock in self.descriptors: if sock != self.srvsock and sock != omit_sock: sock.send(str) print str
from twisted.internet import protocol from twisted.protocols import basic from twisted.python import log from twisted.internet import reactor import sys
class ConfigServer(basic.LineReceiver): def __init__(self): pass
def lineReceived(self, line): if line == 'quit': self.sendLine(”Goodbye.”) self.transport.loseConnection() else: self.broadcast(line)
def broadcast(self, msg): for client in self.factory.clients: client.sendLine("%s said: %s" % (self.transport.getPeer().host,msg) );