Có chuyện gì vậy Pythoneers! Đây là Vishesh Dvivingi và trong bài đăng trên blog này, tôi sẽ chỉ cho bạn cách bạn có thể tạo một ứng dụng trò chuyện thời gian thực trong Python, sử dụng mô-đun Tkinter và lập trình ổ cắm.
Blog này sẽ thảo luận về lập trình ổ cắm, mô -đun Tkinter và cách bạn có thể tích hợp cả hai.
Về ứng dụng
Kho lưu trữ của ứng dụng này bao gồm hai tệp Python, Server.py và Client.py. Server.py là tập lệnh chạy máy chủ, tất cả các máy khách sẽ sử dụng để liên lạc với nhau. Và Client.py sẽ được khách hàng sử dụng để kết nối với máy chủ và gửi tin nhắn cho các máy khách khác.
Vì vậy, chúng tôi sẽ bắt đầu bởi script server.py
Tạo Server.py
Trước hết, chúng tôi sẽ nhập tất cả các mô -đun cần thiết của Server.py
import socket
import threading
Nhập chế độ FullScreenen EXIT Mode FullScreen
Chúng tôi sẽ cần mô -đun ổ cắm để liên lạc với máy khách và mô -đun luồng để tạo một luồng sẽ tiếp tục nghe tin nhắn từ máy khách.
Tiếp theo, chúng tôi sẽ thiết lập một số biến
HOST = '127.0.0.1'
PORT = 1234
LISTENER_LIMIT = 5
active_clients = []
Nhập chế độ FullScreenen EXIT Mode FullScreen
Chúng tôi sẽ cần mô -đun ổ cắm để liên lạc với máy khách và mô -đun luồng để tạo một luồng sẽ tiếp tục nghe tin nhắn từ máy khách.
Tiếp theo, chúng tôi sẽ thiết lập một số biến
Máy chủ và cổng ở đây xác định máy chủ và cổng mà máy chủ sẽ chạy, Listener_limit lưu trữ lượng máy khách có thể kết nối với máy chủ tại một thời điểm. Và cuối cùng, Active_Clents sẽ lưu trữ tất cả người dùng sẽ được kết nối với máy chủ ở mọi trường hợp
Nhập chế độ FullScreenen EXIT Mode FullScreen
Chúng tôi sẽ cần mô -đun ổ cắm để liên lạc với máy khách và mô -đun luồng để tạo một luồng sẽ tiếp tục nghe tin nhắn từ máy khách.
Tiếp theo, chúng tôi sẽ thiết lập một số biến
def send_message_to_client[client, message]:
client.sendall[message.encode[]]
Nhập chế độ FullScreenen EXIT Mode FullScreen
Chúng tôi sẽ cần mô -đun ổ cắm để liên lạc với máy khách và mô -đun luồng để tạo một luồng sẽ tiếp tục nghe tin nhắn từ máy khách.
Tiếp theo, chúng tôi sẽ thiết lập một số biến
def send_messages_to_all[message]:
for user in active_clients:
send_message_to_client[user[1], message]
Nhập chế độ FullScreenen EXIT Mode FullScreen
Chúng tôi sẽ cần mô -đun ổ cắm để liên lạc với máy khách và mô -đun luồng để tạo một luồng sẽ tiếp tục nghe tin nhắn từ máy khách.
Tiếp theo, chúng tôi sẽ thiết lập một số biến
def client_handler[client]:
# Server will listen for client message that will
# Contain the username
while 1:
username = client.recv[2048].decode['utf-8']
if username != '':
active_clients.append[[username, client]]
prompt_message = "SERVER~" + f"{username} added to
the chat"
send_messages_to_all[prompt_message]
break
else:
print["Client username is empty"]
threading.Thread[target=listen_for_messages, args=[client,
username, ]].start[]
Nhập chế độ FullScreenen EXIT Mode FullScreen
Chúng tôi sẽ cần mô -đun ổ cắm để liên lạc với máy khách và mô -đun luồng để tạo một luồng sẽ tiếp tục nghe tin nhắn từ máy khách.
Note: This function is also executed as a thread, for each new
connected client.
def main[]:
server = socket.socket[socket.AF_INET, socket.SOCK_STREAM]
try:
server.bind[[HOST, PORT]]
print[f"Running the server on {HOST} {PORT}"]
except:
print[f"Unable to bind to host {HOST} and port
{PORT}"]
server.listen[LISTENER_LIMIT]
while 1:
client, address = server.accept[]
print[f"Successfully connected to client {address[0]} {address[1]}"]
threading.Thread[target=client_handler, args=[client, ]].start[]
if __name__ == '__main__':
main[]
Nhập chế độ FullScreenen EXIT Mode FullScreen
Chúng tôi sẽ cần mô -đun ổ cắm để liên lạc với máy khách và mô -đun luồng để tạo một luồng sẽ tiếp tục nghe tin nhắn từ máy khách.
- Tiếp theo, chúng tôi sẽ thiết lập một số biến
- Máy chủ và cổng ở đây xác định máy chủ và cổng mà máy chủ sẽ chạy, Listener_limit lưu trữ lượng máy khách có thể kết nối với máy chủ tại một thời điểm. Và cuối cùng, Active_Clents sẽ lưu trữ tất cả người dùng sẽ được kết nối với máy chủ ở mọi trường hợp
- Tiếp theo, chúng tôi sẽ tạo chức năng nghe_for_messages
def listen_for_messages[client, username]: while 1: message = client.recv[2048].decode['utf-8'] if message != '': final_msg = username + '~' + message send_messages_to_all[final_msg] else: print[f"The message send from client {username} is empty"]
- Chức năng này sẽ tiếp tục nghe tin nhắn từ các máy khách được kết nối. Trong trường hợp nếu nó nhận được một tin nhắn, nó sẽ gọi chức năng SEND_MESSAGE_TO_ALL để gửi tin nhắn nhận được đến tất cả các máy khách hiện đang được kết nối.
Tiếp theo, chúng tôi tạo chức năng send_message_to_client
Chức năng này được sử dụng để gửi tin nhắn đến một máy khách