zoukankan      html  css  js  c++  java
  • python 网络通讯 服务器端代码demo,能够同时处理多个客户端的连接请求

    这是一个python网络通讯服务器端的代码demo,能够同时处理多个客户端的连接请求。

    from socket import *
    import threading
    from datetime import *
    import time
    import signal
    
    server=socket(AF_INET,SOCK_STREAM)
    server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
    server.bind(("",4000))
    server.listen(10)
    print('waiting to connecting from clients')
    
    def client_thread(client_socket,client):
        global connect_count
        global is_exit
        while not is_exit:
            data=client_socket.recv(1024)  # when  return value is b'',the connect with client is close
            if data !=b'':
                print(str(datetime.now()),'  ',client[0],':',data)
                client_socket.send(bytes('数据接收成功!', encoding = "utf8") )
            if data=="over" or data ==b'':
                if mutex_num.acquire(1):
                    connect_count=connect_count-1
                    print("client",client[0],"shutdown,current connect count is",connect_count)
                    mutex_num.release()
                client_socket.close()
                break
    
    
    def handle(signum, frame):
        global is_exit
        is_exit = True
        print("receive a signal {0},is_exit={1}").format(signum, is_exit)
    
    
    signal.signal(signal.SIGINT, handle)
    signal.signal(signal.SIGTERM, handle)
    
    mutex_num = threading.Lock()
    
    connect_count = 0
    max_connect_num = 10
    is_exit = False
    thread_set = []
    
    while not is_exit:
        client_socket, client = server.accept()
        if mutex_num.acquire(1):
            connect_count = connect_count + 1
            print("receive new connect from:", client, "current connect count :", connect_count)
            mutex_num.release()
        t = threading.Thread(target=client_thread, args=(client_socket, client))
        t.setDaemon(True)
        t.start()
        thread_set.append(t)
    
    while (1):
        isalive = False
        for t in thread_set:
            flag = t.is_alive()
            isalive = isalive or flag
        if not isalive:
            break
    
    server.close()
    

      

  • 相关阅读:
    树莓派安装aria2轻松下载小资源
    利用树莓派3搭建可以发射无线局域网的微型服务器
    Vue语法
    redis-cluster集群
    分布式锁
    Redis--消息队列
    设计模式---享元模式
    设计模式(单例模式+原型模式)+ c#的内存分配机制
    MVC的ActionFilter
    MVC异常处理的7大场景 + MVC的异常处理的过滤器 + 全局异常
  • 原文地址:https://www.cnblogs.com/mangojun/p/10649867.html
Copyright © 2011-2022 走看看