Python聊天室源码,记录

从网上找下来的Python聊天室源码, 收集了两个,  两个Python聊天室源码修正了一些错误,试验过来,都能用的, 记录下来。

两个都是可以用telnet登录的, 命令: telnet 服务器ip  8080 ,  windows里就在开始=>运行里输入,linux等系统就在终端输入.

好久没有玩过聊天室了,不过这些Python聊天室源码可以作为Python学习材料, 不错的.

代码一

  1. #!/usr/local/python
  2. #-*- encoding:gb2312 -*-
  3.  
  4. from twisted.internet import protocol
  5. from twisted.protocols import basic
  6. from twisted.python import log
  7. from twisted.internet import reactor
  8. import sys
  9.  
  10. class ConfigServer(basic.LineReceiver):
  11.     def __init__(self):
  12.         pass
  13.  
  14.     def lineReceived(self, line):
  15.         if line == 'quit':
  16.             self.sendLine("Goodbye.")
  17.             self.transport.loseConnection()
  18.         else:
  19.             self.broadcast(line)
  20.   
  21.     def broadcast(self, msg):
  22.         for client in self.factory.clients:
  23.             client.sendLine("%s said:  %s" % (self.transport.getPeer().host,msg) );
  24.  
  25.     def connectionMade(self):
  26.         self.factory.clients.append(self)
  27.         print "Connect from %s.." % self.transport.getHost()
  28.         self.sendLine("Welcome...%s" % self.transport.getHost())
  29.  
  30.     def connectionLost(self, reason):
  31.         self.factory.clients.remove(self)
  32.         # self.sendLine("Disconnect...%s" % self.transport.getHost())
  33.         pass
  34.  
  35. class ConfigServerFactory(protocol.ServerFactory):
  36.     protocol = ConfigServer
  37.     clients = []
  38.  
  39. def main():
  40.     log.startLogging(sys.stdout)
  41.     reactor.listenTCP(8080,ConfigServerFactory())
  42.     reactor.run()
  43.   
  44. if __name__ == '__main__':     
  45.     main()

代码2

  1. import socket
  2. import select
  3.  
  4. class ChatServer:
  5.  
  6.   def __init__( self, port ):
  7.     self.port = port;
  8.  
  9.     self.srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
  10.     self.srvsock.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 )
  11.     self.srvsock.bind( ("192.168.0.25", port) )
  12.     self.srvsock.listen( 5 )
  13.  
  14.     self.descriptors = [self.srvsock]
  15.     print 'ChatServer started on port %s' % port
  16.  
  17.  
  18.   def run( self ):
  19.  
  20.    while 1:
  21.  
  22.     # Await an event on a readable socket descriptor
  23.     (sread, swrite, sexc) = select.select( self.descriptors, [], [] )
  24.  
  25.     # Iterate through the tagged read descriptors
  26.     for sock in sread:
  27.  
  28.       # Received a connect to the server (listening) socket
  29.       if sock == self.srvsock:
  30.         self.accept_new_connection()
  31.       else:
  32.  
  33.         # Received something on a client socket
  34.         str = sock.recv(100)
  35.  
  36.         # Check to see if the peer socket closed
  37.         if str == '':
  38.           host,port = sock.getpeername()
  39.           str = 'Client left %s:%s\r\n' % (host, port)
  40.           self.broadcast_string( str, sock )
  41.           sock.close
  42.           self.descriptors.remove(sock)
  43.         else:
  44.           host,port = sock.getpeername()
  45.           newstr = '[%s:%s] %s' % (host, port, str)
  46.           self.broadcast_string( newstr, sock )
  47.  
  48.  
  49.   def accept_new_connection( self ):
  50.  
  51.     newsock, (remhost, remport) = self.srvsock.accept()
  52.     self.descriptors.append( newsock )
  53.  
  54.     newsock.send("You're connected to the Python chatserver\r\n")
  55.     str = 'Client joined %s:%s\r\n' % (remhost, remport)
  56.     self.broadcast_string( str, newsock )
  57.  
  58.   def broadcast_string( self, str, omit_sock ):
  59.  
  60.    for sock in self.descriptors:
  61.     if sock != self.srvsock and sock != omit_sock:
  62.       sock.send(str)
  63.  
  64.    print str,
  65.  
  66. myServer = ChatServer( 8080 ).run()

留言