博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python select方法的使用
阅读量:4342 次
发布时间:2019-06-07

本文共 1360 字,大约阅读时间需要 4 分钟。

服务端

1 import socket 2 import select   #同步io 3 sock = socket.socket() 4 sock.bind(("127.0.0.1",8000)) 5 sock.listen(5) 6 sock.setblocking(False) #非阻塞链接(False) 7 inputs = [sock,] 8 while True: 9        a, b, c = select.select(inputs, [], [])  #监控(sock连接以及收发内核态存储的数据)10     for obj in a:11         if obj == sock:12             conn, addr = obj.accept()13             inputs.append(conn)14             print(conn)15 16         else:17             while True:  # 通信循环,18                 #解决有多个client端同时连接,若其中一个捣蛋关闭己端连接,那么对端跟着被中断19                 try:20                     data = obj.recv(1024)21                     print(data.decode('utf-8'))22                     send_data = input(">>>")23                     if len(send_data) == 0: break24                     obj.send(send_data.encode('utf-8'))25 26                 except Exception as e:27                     break

 

  #select()的都是基于单线程的并发操作(非阻塞的socket连接)

    #select()方法接收并监控3个通信列表, 第一个是所有的输入的data,就是指外部发过来的数据,
    # 第2个是监控和接收所有要发出去的data(outgoing data),
    # 第3个监控错误信息,接下来我们需要创建2个列表来包含输入和输出信息来传给select().
    #监控客户端发来的连接跟 监听io的读写

客户端

1 import socket2 sock = socket.socket()3 sock.connect(("127.0.0.1",8000))4 while True:5     send_data = input(">>>")6     sock.send(send_data.encode('utf-8'))7     recv_data = sock.recv(1024)8     print(recv_data.decode('utf-8'))

 

转载于:https://www.cnblogs.com/hongyongshang/p/6836154.html

你可能感兴趣的文章
Http协议的学习
查看>>
【转】轻松记住大端小端的含义(附对大端和小端的解释)
查看>>
设计模式那点事读书笔记(3)----建造者模式
查看>>
ActiveMQ学习笔记(1)----初识ActiveMQ
查看>>
Java与算法之(2) - 快速排序
查看>>
Windows之IOCP
查看>>
WebSocket & websockets
查看>>
openssl 升级
查看>>
ASP.NET MVC:通过 FileResult 向 浏览器 发送文件
查看>>
CVE-2010-2883Adobe Reader和Acrobat CoolType.dll栈缓冲区溢出漏洞分析
查看>>
使用正确的姿势跨域
查看>>
AccountManager教程
查看>>
Android学习笔记(十一)——从意图返回结果
查看>>
算法导论笔记(四)算法分析常用符号
查看>>
ultraedit激活
查看>>
总结(6)--- python基础知识点小结(细全)
查看>>
亿级曝光品牌视频的幕后设定
查看>>
ARPA
查看>>
JSP开发模式
查看>>
我的Android进阶之旅------>Android嵌入图像InsetDrawable的使用方法
查看>>