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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM