下面是内存溢出 jb51.cc 通过网络收集整理的代码片段。
内存溢出小编现在分享给大家,也给大家做个参考。
__author__ = '’import socketimport selectHOST = ""PORT = 9008BACKLOG = 100BUFF = 1024ADDR = (HOST,PORT)CONNECT_MAP = {}def broadcast_msg(_srv_sock,my_sock,msg): for _file_no,_sock in CONNECT_MAP.iteritems(): if _sock != _srv_sock and _sock != my_sock: try: _sock.send(msg) except socket.error: passdef chat_server(): srv_sock = socket.socket(socket.AF_INET,socket.soCK_STREAM) srv_sock.setsockopt(socket.soL_SOCKET,socket.so_REUSEADDR,1) srv_sock.bind(ADDR) srv_sock.Listen(BACKLOG) _epoll = select.epoll() _epoll.register(srv_sock.fileno(),select.EPolliN) print "Start chat server on port %d" % PORT while True: events = _epoll.poll(timeout=0.5) for _file_no,event in events: if _file_no == srv_sock.fileno(): _cli_sock,_addr = srv_sock.accept() _cli_sock.setblocking(0) print "ClIEnt (%s,%s) connected" % _addr broadcast_msg(srv_sock,_cli_sock,"[%s:%s] entered root\n\r" % _addr) _epoll.register(_cli_sock.fileno(),select.EPolliN) CONNECT_MAP[_cli_sock.fileno()] = _cli_sock elif event & select.EPolliN: try: _sock = CONNECT_MAP[_file_no] _data = _sock.recv(BUFF) if _data: _msg = "<" + str(_sock.getpeername()) + ">" + _data + '\n\r' broadcast_msg(srv_sock,_sock,_msg) except: CONNECT_MAP[_file_no].close() CONNECT_MAP.pop(_file_no) _epoll.unregister(_file_no) elif event & select.EPolLHUP: CONNECT_MAP[_file_no].close() CONNECT_MAP.pop(_file_no) _epoll.unregister(_file_no)if __name__ == "__main__": chat_server()
以上是内存溢出(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
总结以上是内存溢出为你收集整理的python socket 聊天室全部内容,希望文章能够帮你解决python socket 聊天室所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)