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

  

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/20848.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论