zoukankan      html  css  js  c++  java
  • python-selector模块

    server:

    import selectors
    import socket
    
    # sel = selectors.DefaultSelector()
    #
    # def accept(sock, mask):
    #     conn, addr = sock.accept()  # Should be ready
    #     print('accepted', conn, 'from', addr)
    #     conn.setblocking(False)
    #     sel.register(conn, selectors.EVENT_READ, read)
    #
    # def read(conn, mask):
    #     data = conn.recv(1024)  # Should be ready
    #     if data:
    #         print('echoing', repr(data), 'to', conn)
    #         conn.send(data)  # Hope it won't block
    #     else:
    #         print('closing', conn)
    #         sel.unregister(conn)
    #         conn.close()
    #
    #
    # sock = socket.socket()
    # sock.bind(('localhost', 10000))
    # sock.listen(100)
    # sock.setblocking(False)
    # sel.register(sock, selectors.EVENT_READ, accept)
    # while True:
    #     events = sel.select()  #m默认阻塞,有活动连接就返回活动连接列表
    #     for key, mask in events:
    #         callback = key.data   #accept
    #         callback(key.fileobj, mask)
    #
    
    
    
    
    class Server(object):
        def __init__(self,sel,sock):
            self.sel = sel
            self.sock = sock
    
    
        def run(self,host,port):
            self.sock.bind((host,port))
            self.sock.listen(1000)
            self.sock.setblocking(False)
            self.sel.register(sock, selectors.EVENT_READ, self.accept)
            while True:
                events = self.sel.select()  # m默认阻塞,有活动连接就返回活动连接列表
                for key, mask in events:
                    callback = key.data  # accept
                    callback(key.fileobj, mask)
    
        def accept(self, sock,mask):
            conn, addr = sock.accept()  # Should be ready
            print('accepted', conn, 'from', addr)
            conn.setblocking(False)
            sel.register(conn, selectors.EVENT_READ, self.read)
    
        def read(self,conn, mask):
            data = conn.recv(1024)  # Should be ready
            if data:
                print('echoing', repr(data), 'to', conn)
                conn.send(data)  # Hope it won't block
            else:
                print('closing', conn)
                sel.unregister(conn)
                conn.close()
    
    if __name__== '__main__':
        sel = selectors.DefaultSelector()
        sock = socket.socket()
        host,port = 'localhost',10000
        server_obj = Server(sel,sock)
        server_obj.run(host,port)
    

    client:

    import socket
    
    HOST = 'localhost'
    PORT = 10000
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    while True:
        msg = bytes(input(">>:").strip(), encoding="utf-8")
        if msg == 'q'.encode("utf-8"):
            exit("退出!")
        s.sendall(msg)
        data = s.recv(1024)
        print('Received',data.decode())
    s.close()
    
  • 相关阅读:
    Linux 学习手记(4):Linux系统常用Shell命令
    Linux 学习手记(3):Linux基本的文件管理操作
    Nginx的启动、停止与重启
    20个常用正则表达式
    MongoDB增删改查实例
    MongoDB 查询总结
    MongoDB数据库未授权访问漏洞及加固
    MongoDB安装
    java模拟post方式提交表单实现图片上传【转】
    Java图片处理 Thumbnails框架
  • 原文地址:https://www.cnblogs.com/guqing/p/6512246.html
Copyright © 2011-2022 走看看