首页 > 代码库 > Python select示例
Python select示例
import selectimport socketimport sysimport queue# Create a TCP/IPserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server.setblocking(0)# Bind the socket to the portserver_address = (‘localhost‘, 10000)print (sys.stderr, ‘starting up on %s port %s‘ % server_address)server.bind(server_address)# Listen for incoming connectionsserver.listen(5)# Sockets from which we expect to readinputs = [ server ]# Sockets to which we expect to writeoutputs = [ ]# Outgoing message queues (socket:Queue)message_queues = {}while inputs: # Wait for at least one of the sockets to be ready for processing print (sys.stderr, ‘waiting for the next event‘) readable, writable, exceptional = select.select(inputs, outputs, inputs) # Handle inputs for s in readable: if s is server: # A "readable" socket is ready to accept a connection connection, client_address = s.accept() print (sys.stderr, ‘ connection from‘, client_address) connection.setblocking(0) inputs.append(connection) # Give the connection a queue for data we want to send message_queues[connection] = queue.Queue() else: data = s.recv(1024) if data: # A readable client socket has data print (sys.stderr, ‘ received "%s" from %s‘ %(data, s.getpeername())) message_queues[s].put(data) # Add output channel for response if s not in outputs: outputs.append(s) else: # Interpret empty result as closed connection print (sys.stderr, ‘ closing‘, client_address) # Stop listening for input on the connection if s in outputs: outputs.remove(s) inputs.remove(s) s.close() # Remove message queue del message_queues[s] # Handle outputs for s in writable: try: next_msg = message_queues[s].get_nowait() except queue.Empty: # No messages waiting so stop checking for writability. print (sys.stderr, ‘ ‘, s.getpeername(), ‘queue empty‘) outputs.remove(s) else: print (sys.stderr, ‘ sending "%s" to %s‘ %(next_msg, s.getpeername())) s.send(next_msg) # Handle "exceptional conditions" for s in exceptional: print (sys.stderr, ‘exception condition on‘, s.getpeername()) # Stop listening for input on the connection inputs.remove(s) if s in outputs: outputs.remove(s) s.close() # Remove message queue del message_queues[s]
import socketimport sysmessages = [‘This is the message. ‘, ‘It will be sent ‘, ‘in parts.‘, ]server_address= (‘localhost‘, 10000)# Create aTCP/IP socketsocks = [socket.socket(socket.AF_INET, socket.SOCK_STREAM), socket.socket(socket.AF_INET,socket.SOCK_STREAM), ]# Connect thesocket to the port where the server is listeningprint (sys.stderr, ‘connecting to %s port %s‘ % server_address)for s in socks: s.connect(server_address)for message in messages: # Send messages on both sockets for s in socks: print (sys.stderr, ‘%s: sending"%s"‘ %(s.getsockname(), message)) s.send(bytes(message,encoding=‘utf-8‘)) # Read responses on both sockets for s in socks: data = s.recv(1024) print (sys.stderr, ‘%s: received"%s"‘ %(s.getsockname(), data)) if not data: print (sys.stderr, ‘closingsocket‘, s.getsockname()) s.close()
Python select示例
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。