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()
    

      

  • 相关阅读:
    Appium学习笔记||十一、Appium按键操作
    Appium学习笔记||九、操作不可见元素
    Appium学习笔记||八、滑动页面
    Appium学习笔记||七、用UIAutomator API定位
    Appium学习笔记||六、根据Xpath寻找元素
    Appium学习笔记||五、Tap方法
    enumerate 函数
    python 复制 浅copy 深copy 的区别
    听歌都能听出来代码...
    for 循环时候 pop现象
  • 原文地址:https://www.cnblogs.com/mangojun/p/10649867.html
Copyright © 2011-2022 走看看