免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3930 | 回复: 4
打印 上一主题 下一主题

~已解决~转一个python写的50多行的聊天室源码~(好像有点问题请看看) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-19 17:04 |只看该作者 |倒序浏览
原文 ~
http://doc.zoomquiet.org/data/20051121170924/



  1. import socket
  2. import select

  3. class ChatServer:

  4.   def __init__( self, port ):
  5.     self.port = port;

  6.     self.srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
  7.     self.srvsock.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 )
  8.     self.srvsock.bind( ("192.168.10.233", port) )
  9.     self.srvsock.listen( 5 )

  10.     self.descriptors = [self.srvsock]
  11.     print 'ChatServer started on port %s' % port


  12. def run( self ):

  13.   while 1:

  14.     # Await an event on a readable socket descriptor
  15.     (sread, swrite, sexc) = select.select( self.descriptors, [], [] )

  16.     # Iterate through the tagged read descriptors
  17.     for sock in sread:

  18.       # Received a connect to the server (listening) socket
  19.       if sock == self.srvsock:
  20.         self.accept_new_connection()
  21.       else:

  22.         # Received something on a client socket
  23.         str = sock.recv(100)

  24.         # Check to see if the peer socket closed
  25.         if str == '':
  26.           host,port = sock.getpeername()
  27.           str = 'Client left %s:%s\r\n' % (host, port)
  28.           self.broadcast_string( str, sock )
  29.           sock.close
  30.           self.descriptors.remove(sock)
  31.         else:
  32.           host,port = sock.getpeername()
  33.           newstr = '[%s:%s] %s' % (host, port, str)
  34.           self.broadcast_string( newstr, sock )


  35. def accept_new_connection( self ):

  36.   newsock, (remhost, remport) = self.srvsock.accept()
  37.   self.descriptors.append( newsock )

  38.   newsock.send("You're connected to the Python chatserver\r\n")
  39.   str = 'Client joined %s:%s\r\n' % (remhost, remport)
  40.   self.broadcast_string( str, newsock )

  41. def broadcast_string( self, str, omit_sock ):

  42.   for sock in self.descriptors:
  43.     if sock != self.srvsock and sock != omit_sock:
  44.       sock.send(str)

  45.   print str,

  46. myServer = ChatServer( 2626 ).run()
复制代码

不过运行后报错~


  1. [root@localhost python]# python python.py
  2. ChatServer started on port 2626
  3. Traceback (most recent call last):
  4.   File "python.py", line 66, in <module>
  5.     myServer = ChatServer( 2626 ).run()
  6. AttributeError: ChatServer instance has no attribute 'run'
复制代码

[ 本帖最后由 jd_chen 于 2007-3-19 20:57 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-03-19 17:27 |只看该作者
缩进缩进
run属于类里的一个方法
注意缩进

论坛徽章:
0
3 [报告]
发表于 2007-03-19 20:09 |只看该作者
我把

  1. myServer = ChatServer( 2626 ).run()
复制代码

改为这个

  1. myServer = ChatServer( 2626 )
  2. myServer.run()
复制代码

还是报一样的错?
我是用LINUX的~用2.5板本

论坛徽章:
0
4 [报告]
发表于 2007-03-19 20:23 |只看该作者
原帖由 jd_chen 于 2007-3-19 20:09 发表
我把

  1. myServer = ChatServer( 2626 ).run()
复制代码

改为这个

  1. myServer = ChatServer( 2626 )
  2. myServer.run()
复制代码

还是报一样的错?
我是用LINUX的~用2.5板本



bleem1998的意思你没明白,他是说你ChatServer类中所定义的函数缩进不对。

论坛徽章:
0
5 [报告]
发表于 2007-03-19 20:35 |只看该作者
原帖由 bleem1998 于 2007-3-19 17:27 发表
缩进缩进
run属于类里的一个方法
注意缩进

呵呵,谢谢可以了~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP