zoukankan      html  css  js  c++  java
  • 使用select实现多并发的socket的功能

    select是一个io多路复用的io模型,也叫做事件驱动的io模型,我们今天用select来实现一个多并发的socket的聊天的程序

    先看下server端的代码

    import socket
    import select
    
    socket_list = []
    socket_list_all = []
    def create_socket():
        for i in range(9000,9100):
            socket_name = "socket_" + str(i)
            socket_name = socket.socket()
            addr = ("127.0.0.1",i)
            socket_name.bind(addr)
            socket_name.listen(10)
            socket_list.append(socket_name)
            #负责存放所有的socket服务端的对象
            socket_list_all.append(socket_name)
            #负责存储所有的socket服务端和客户端的socket对象
    #生成100个socket对象
    socket_list_temp = socket_list
    if __name__ == '__main__':
        create_socket()
        while True:
            r,w,e = select.select(socket_list_all,[],[])
            #监听socket列表
            for obj in r:
                if obj in socket_list:
                    conn,addr = obj.accept()
                    socket_list_all.append(conn)
                    break
                #如果在socket_list,在说明是一个新的连接过来连接socketserver
                else:
                    #如果不是,则说明是已有的连接
                    client_data = obj.recv(1024)
                    print(obj, str(client_data, encoding="utf-8"), sep=">>>>")
                    server_data = input("server:")
                    obj.sendall(bytes(server_data, encoding="utf-8"))
    

      

    在来看客户端的代码

    import socket
    ip_bind = ("127.0.0.1",9000)
    client1= socket.socket()
    client1.connect(ip_bind)
    while True:
        clent_data = input("client:")
        client1.sendall(bytes(clent_data,encoding="utf-8"))
        server_data = client1.recv(1024)
        print("server",str(server_data,encoding="utf-8"))
    

      

  • 相关阅读:
    linux命令
    常用正则表达式总结
    List集合对象根据字段排序
    IO字 节流/字符流 读取/写入文件
    Jquery广告浮动效果小案例
    拿到添加对象的id号方法
    Jquery省市区三级联动案例
    JAVA集合迭代遍历和特性介绍
    Listener监听器使用小案例
    java中用过滤器解决字符编码问题
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/8284794.html
Copyright © 2011-2022 走看看