zoukankan      html  css  js  c++  java
  • 非堵塞思想实现单进程单线程TCP服务器并发

    将套接字设置成默认非堵塞状态,用捕获异常处理套接字因非堵塞出现的异常,达到程序的正常运行,效果如下:

     1 import socket
     2 
     3 
     4 def main():
     5     tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     6     tcp_server_socket.bind(('', 7788))
     7     tcp_server_socket.listen(128)
     8     tcp_server_socket.setblocking(False)  # 设置监听套接字为非堵塞
     9 
    10     client_socket_list = list()   # 设置一个列表储存客户端套接字
    11     while True:
    12         try:
    13             new_socket, client_addr = tcp_server_socket.accept()
    14         except:
    15             pass
    16             # print("没有新的客户端连接")
    17         else:
    18             print("来了一个客户端")
    19             new_socket.setblocking(False)  # 设置客户端套接字为非堵塞
    20             client_socket_list.append(new_socket)
    21 
    22         # 列表为空是for循环不会执行
    23         for client_socket in client_socket_list:
    24             try:
    25                 recv_data = client_socket.recv(1024)
    26             except:
    27                 pass
    28                 # print("没有接受到客户端的数据")
    29             else:
    30                 if recv_data:
    31                     print(recv_data.decode('utf-8'))
    32                 # 当recv有接收但无数据时,证明客户端关闭了连接
    33                 else:
    34                     client_socket_list.remove(client_socket)
    35                     client_socket.close()
    36 
    37 
    38 if __name__ == '__main__':
    39     main()
  • 相关阅读:
    指针
    day07
    day06
    oracle instr
    动态解析dll及使用类
    客户端调用接口
    Java中调用WebService
    Vs2015智能提示英文
    oracle中varchar(32)转nvarchar(32)
    C#创建XML节点
  • 原文地址:https://www.cnblogs.com/zzmx0/p/12688298.html
Copyright © 2011-2022 走看看