zoukankan      html  css  js  c++  java
  • python select方法的使用

    服务端

     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: break
    24                     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 socket
    2 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'))
  • 相关阅读:
    IDEA、Eclipse快捷键对比
    linux常见命令
    拷贝本地文件到远程服务器的批处理脚本
    关系型数据库的超键、候选键、主键
    JAVA运算符总结
    JAVA原码反码补码
    JPA查询语句(转载)
    Spring Data JPA初使用(转载)
    android学习————项目导入常见错误整理(转载)
    Spring 系列: Spring 框架简介
  • 原文地址:https://www.cnblogs.com/hongyongshang/p/6836154.html
Copyright © 2011-2022 走看看