#!/usr/bin/python # -*- coding:utf-8 -*- import socket, select for res in socket.getaddrinfo('0.0.0.0', 1025, socket.AF_INET, socket.SOCK_STREAM): fa, socktype, proto, canonname, sa = res SockServer = socket.socket(fa, socktype, proto) SockServer.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) SockServer.bind(sa) SockServer.listen(5) epoll = select.epoll() epoll.register(SockServer.fileno(), select.EPOLLIN) try: conns={}; addrs={} while True: for fileno, event in epoll.poll(1): if fileno == SockServer.fileno(): conn, addr = SockServer.accept() epoll.register(conn.fileno(), select.EPOLLIN) conns[conn.fileno()] = conn addrs[conn.fileno()] = addr conn.send("--- Welcome to server. Type EXIT to quit. ---\n") print '[server]: accept connection from %s<%s>' % addr elif event & select.EPOLLIN: message = conns[fileno].recv(1024) print "%s<%s> say: " % (addrs[fileno][0], addrs[fileno][1]) + message.strip() if b'EXIT' in message: epoll.modify(fileno, select.EPOLLOUT) for key in conns.keys(): if key != fileno: conns[key].send('%s<%s> say: %s' % (addrs[key][0], addrs[key][1], message)) elif event & select.EPOLLOUT: epoll.modify(fileno, 0) conns[fileno].shutdown(socket.SHUT_RDWR) elif event & select.EPOLLHUP: epoll.unregister(fileno) conns[fileno].close() print '[server]: %s<%s> quit.' % addrs[fileno] del conns[fileno] del addrs[fileno] finally: epoll.unregister(SockServer.fileno()) epoll.close() SockServer.close()
python epoll聊天室程序
原创li_qinshan 博主文章分类:Shell/Python ©著作权
©著作权归作者所有:来自51CTO博客作者li_qinshan的原创作品,请联系作者获取转载授权,否则将追究法律责任
仿照《how to use linux epoll with python》写的一个聊天室程序,比较简单。
python版本:2.7.3
程序运行如图:
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
使用Netty开发聊天室功能
使用Netty开发聊天室功能
Netty 服务端 客户端 -
快速为App打造Android端聊天室
本文详细教大家如何集成ChatroomUIKit,以及集成中常见报错如何解决。
android 聊天室 Android -
linux 聊天室程序
==========================
linux 多线程 服务器 编程 java -
jquery 聊天室 javaweb聊天室
引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> <version>2.1
jquery 聊天室 java spring boot websocket spring

















