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"))
    

      

  • 相关阅读:
    易语言常用源码
    ci的数据库地址
    格式化输出php数组
    mysql插入表情问题
    线程、进程与协程2
    线程、进程与协程
    if __name=='__main__"的作用
    动态导入模块
    面向对象补充之方法
    getpass模块
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/8284794.html
Copyright © 2011-2022 走看看