zoukankan      html  css  js  c++  java
  • 单进(线)程非堵塞实现原理

    原理:

     1 import socket
     2 import time
     3 
     4 
     5 def main():
     6     # 创建套接字
     7     tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
     8     # 绑定端口
     9     tcp_server_socket.bind(("",7890))
    10     # 设置监听状态
    11     tcp_server_socket.listen(128)
    12     # 设置非堵塞
    13     tcp_server_socket.setblocking(False)
    14 
    15     new_client_list = list()
    16 
    17     while True:
    18         time.sleep(0.5)
    19         try:
    20             new_client, client_addr = tcp_server_socket.accept()
    21         except Exception as ret:
    22             print("-----没有新的客户端进来-----")
    23         else:
    24             print("----没有产生异常,意味一个新客户端到来-----")
    25             # 为新客户端非堵塞服务
    26             new_client.setblocking(False)
    27             # 把新产生的socket存入列表
    28             new_client_list.append(new_client)
    29 
    30         for new_client_socket in new_client_list:
    31             try:
    32                 recv_data = new_client_socket.recv(1024)
    33             except Exception as ret:
    34                 print("----客户端没有发来数据-----")
    35             else:
    36                 print("-----没有异常,意味着有数据-----")
    37                 # 如果发来的数据不为空
    38                 if recv_data:
    39                     print("----客户端发来的数据-----")
    40                 # 如果数据为空,意味着客户端调用了close()
    41                 else:
    42                     new_client_socket.close()
    43                     new_client_list.remove(new_client_socket)
    44                     print("----客户端已关闭-----")
    45 
    46     # 关闭套接字
    47     tcp_server_socket.close()
  • 相关阅读:
    cJSON库源码分析
    cJSON 使用详解
    day23
    day22
    作业21
    day21
    作业20
    day20
    作业
    day19
  • 原文地址:https://www.cnblogs.com/yifengs/p/11418724.html
Copyright © 2011-2022 走看看