asp网站改php网站方法,国外建筑网站app,wordpress面页模板下,最好网站建设公司排名From: http://www.linuxidc.com/Linux/2014-02/97152.htm 当一个服务器需要与多个客户端进行通信时#xff0c;可以使用多进程或者多线程的服务器#xff0c;也可以使用select模块#xff0c;它可以实现异步通信。Python中的select模块包含了poll()和select(),select的原型…From: http://www.linuxidc.com/Linux/2014-02/97152.htm 当一个服务器需要与多个客户端进行通信时可以使用多进程或者多线程的服务器也可以使用select模块它可以实现异步通信。Python中的select模块包含了poll()和select(),select的原型为(rlist,wlist,xlist[,timeout]),其中rlist是等待读取的对象wlist是等待写入的对象xlist是等待异常的对象最后一个是可选对象指定等待的时间单位是s. select()方法的返回值是准备好的对象的三元组若在timeout的时间内没有对象准备好那么返回值将是空的列表。
下面是使用select的服务器
#!/usr/bin/env python import socket,select serversocket.socket(socket.AF_INET,socket.SOCK_STREAM) server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) server.bind((,10000)) server.listen(5) inputs[server] while 1: rs,ws,esselect.select(inputs,[],[],1) for r in rs: if r is server: clientsock,clientaddrr.accept(); inputs.append(clientsock); else: datar.recv(1024); if not data: inputs.remove(r); else: print data
再编写客户端程序就可以测试select服务器了客户端代码为
#!/usr/bin/env python import socket host127.0.0.1; port10000; ssocket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect((host,port)) s.send(hello from client) s.close();
poll实现服务器时需要用到register()和unregister()方法作用是加入和移除对象poll()的返回值包括了文件描述符和事件polling的事件常量有POLLINPOLLPRIPOLLPOUTPOLLERRPOLLHUPPOLLVAL分别表示读取数据读取紧急数据文件描述符已经准备好文件描述符出错连接丢失无效请求。
下面是使用poll的服务器程序
#!/usr/bin/env python import socket,select ssocket.socket() host port10000 s.bind((host,port)) fdmap{s.fileno():s} s.listen(5) pselect.poll() p.register(s.fileno(),select.POLLIN|select.POLLERR|select.POLLHUP) while 1: eventsp.poll(5000) if len(events)!0: if events[0][1]select.POLLIN: sock,addrs.accept() bufsock.recv(8196) if len(buf)!0: print buf sock.close() print no data
再编写客户端程序即可以测试服务器程序客户端为
#!/usr/bin/env python import socket port10000 ssocket.socket() hostsocket.gethostname() s.connect((host,port)) s.send(hello from the client) s.close()