Tạo multichat (Threading)

chào các bác, em có tạo ra một cuộc trò chuyện giữa server và nhiều client . Để server có thể xử lý và trả lời cho từng server kết nối tới thì em cho đồng bộ luồng. code các file của em như sau:
file server

import socket
import threading
import time


def clientHandler():
    lock.acquire()
    conn,addr = s.accept()
    print(addr, "is Connected")
    while 1:
        data = conn.recv(1024).decode("utf-8")
        if not data:
            break
        print("Tin nhan tu {0}".format(addr), repr(data))
        n=input("Tra loi cho {0}: ".format(addr))
        conn.send(bytes(n,"utf-8"))
        lock.release()
    #s.close()

if __name__ == '__main__':
    lock=threading.Lock()
    HOST = '127.0.0.1' #localhost
    PORT = 8000

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    s.listen(5)

    print("Server is running......")

    while True:
        t1=threading.Thread(target=clientHandler)
        t2=threading.Thread(target=clientHandler)
        t1.start()
        t2.start()
        t1.join()
        t2.join()



    #s.close()
 

file client 1

#File client 1
import socket
import threading
HOST = '127.0.0.1' #localhost
PORT = 8000

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST,PORT))
while True:
    n=input("Nhap lenh: ")
    s.send(bytes(n,"utf-8"))
    data=s.recv(1024).decode("utf-8")
    print("Tin nhan duoc:",data)

file client 2

#file client 2 giong vs file client 1
import socket
import threading
HOST = '127.0.0.1' #localhost
PORT = 8000

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST,PORT))
while True:
    n=input("Nhap lenh: ")
    s.send(bytes(n,"utf-8"))
    data=s.recv(1024).decode("utf-8")
    print("tin nhan duoc:",data)

Sau khi gửi và nhận 1 vài lần thành công thì nó xuất hiện lỗi từ file server là:

Traceback (most recent call last):
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\lib\threading.py", line 932, in _bootstrap_inner
    self.run()
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\lib\threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "C:/Users/Administrator/PycharmProjects/Lap_trinh_mang_NC/Server_chat.py", line 17, in clientHandler
    lock.release()
RuntimeError: release unlocked lock

Mấy bác cho em hỏi sao lại bị lỗi này với đoạn code của em và cách khắc phục và liệu cách hoạt động code của em đã đúng chưa.

2 Likes