Python聊天室源码,记录
从网上找下来的Python聊天室源码, 收集了两个, 两个Python聊天室源码修正了一些错误,试验过来,都能用的, 记录下来。
两个都是可以用telnet登录的, 命令: telnet 服务器ip 8080 , windows里就在开始=>运行里输入,linux等系统就在终端输入.
好久没有玩过聊天室了,不过这些Python聊天室源码可以作为Python学习材料, 不错的.
代码一
- #!/usr/local/python
- #-*- encoding:gb2312 -*-
- 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) );
- def connectionMade(self):
- self.factory.clients.append(self)
- print “Connect from %s..” % self.transport.getHost()
- self.sendLine(“Welcome…%s” % self.transport.getHost())
- def connectionLost(self, reason):
- self.factory.clients.remove(self)
- # self.sendLine(“Disconnect…%s” % self.transport.getHost())
- pass
- class ConfigServerFactory(protocol.ServerFactory):
- protocol = ConfigServer
- clients = []
- def main():
- log.startLogging(sys.stdout)
- reactor.listenTCP(8080,ConfigServerFactory())
- reactor.run()
- if __name__ == ‘__main__’:
- main()
代码2
- import socket
- import select
- class ChatServer:
- def __init__( self, port ):
- self.port = port;
- self.srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
- self.srvsock.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 )
- self.srvsock.bind( (“192.168.0.25”, port) )
- self.srvsock.listen( 5 )
- 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 ):
- 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,
- myServer = ChatServer( 8080 ).run()
分享到: | |
没有评论