Pyhton:简单UI,多线程处理,socket练习

Q:设计一个局域网内的聊天工具,包括服务端程序和客户端程序,要求至少实现从服务器端到客户端的一对多聊天功能,要求提供简单GUI。
GUI是图形界面程序,如何实现这一点呢?很好奇啊
服务器端程序:

import socket
import threading
import tkinter as tk

def receive_messages(client_socket, text_box):
    """
    接收客户端消息的线程函数
    """
    while True:
        try:
            message = client_socket.recv(1024).decode()
            text_box.insert(tk.END, message + '\n')
        except:
            break

def start_server():
    """
    启动服务器
    """
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('localhost', 8888))
    server_socket.listen(5)

    text_box.insert(tk.END, '服务器已启动\n')

    while True:
        client_socket, addr = server_socket.accept()
        text_box.insert(tk.END, '客户端已连接:' + str(addr) + '\n')

        # 创建一个新的线程来接收客户端消息
        receive_thread = threading.Thread(target=receive_messages, args=(client_socket, text_box))
        receive_thread.start()

def send_message():
    """
    发送消息给客户端
    """
    message = input_box.get()
    input_box.delete(0, tk.END)

    for client_socket in client_sockets:
        client_socket.send(message.encode())

# 创建GUI界面
window = tk.Tk()
window.title('聊天工具')

text_box = tk.Text(window)
text_box.pack()

input_box = tk.Entry(window)
input_box.pack()

send_button = tk.Button(window, text='发送', command=send_message)
send_button.pack()

# 启动服务器
server_thread = threading.Thread(target=start_server)
server_thread.start()

window.mainloop()

客户端程序:

import socket
import threading
import tkinter as tk

def receive_messages(client_socket, text_box):
    """
    接收服务器消息的线程函数
    """
    while True:
        try:
            message = client_socket.recv(1024).decode()
            text_box.insert(tk.END, message + '\n')
        except:
            break

def start_client():
    """
    启动客户端
    """
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(('localhost', 8888))

    text_box.insert(tk.END, '已连接到服务器\n')

    # 创建一个新的线程来接收服务器消息
    receive_thread = threading.Thread(target=receive_messages, args=(client_socket, text_box))
    receive_thread.start()

def send_message():
    """
    发送消息给服务器
    """
    message = input_box.get()
    input_box.delete(0, tk.END)

    client_socket.send(message.encode())

# 创建GUI界面
window = tk.Tk()
window.title('聊天工具')

text_box = tk.Text(window)
text_box.pack()

input_box = tk.Entry(window)
input_box.pack()

send_button = tk.Button(window, text='发送', command=send_message)
send_button.pack()

# 启动客户端
client_socket = None
start_client()

window.mainloop()

解释说:使用socket模块实现网络通信。服务端程序使用socket的bind()和listen()方法监听客户端的连接。要设计一个局域网内的聊天工具,可以使用Python的socket模块来实现网络通信,使用tkinter模块来创建简单的GUI界面。

以下是一个简单的示例,包括服务端程序和客户端程序,实现了从服务器端到客户端的一对多聊天功能:

服务端程序:

import socket
import threading
import tkinter as tk

def receive_messages(client_socket, text_box):
    """
    接收客户端消息的线程函数
    """
    while True:
        try:
            message = client_socket.recv(1024).decode()
            text_box.insert(tk.END, message + '\n')
        except:
            break

def start_server():
    """
    启动服务器
    """
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('localhost', 8888))
    server_socket.listen(5)

    text_box.insert(tk.END, '服务器已启动\n')

    while True:
        client_socket, addr = server_socket.accept()
        text_box.insert(tk.END, '客户端已连接:' + str(addr) + '\n')

        # 创建一个新的线程来接收客户端消息
        receive_thread = threading.Thread(target=receive_messages, args=(client_socket, text_box))
        receive_thread.start()

def send_message():
    """
    发送消息给客户端
    """
    message = input_box.get()
    input_box.delete(0, tk.END)

    for client_socket in client_sockets:
        client_socket.send(message.encode())

# 创建GUI界面
window = tk.Tk()
window.title('聊天工具')

text_box = tk.Text(window)
text_box.pack()

input_box = tk.Entry(window)
input_box.pack()

send_button = tk.Button(window, text='发送', command=send_message)
send_button.pack()

# 启动服务器
server_thread = threading.Thread(target=start_server)
server_thread.start()

window.mainloop()

客户端程序:

import socket
import threading
import tkinter as tk

def receive_messages(client_socket, text_box):
    """
    接收服务器消息的线程函数
    """
    while True:
        try:
            message = client_socket.recv(1024).decode()
            text_box.insert(tk.END, message + '\n')
        except:
            break

def start_client():
    """
    启动客户端
    """
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(('localhost', 8888))

    text_box.insert(tk.END, '已连接到服务器\n')

    # 创建一个新的线程来接收服务器消息
    receive_thread = threading.Thread(target=receive_messages, args=(client_socket, text_box))
    receive_thread.start()

def send_message():
    """
    发送消息给服务器
    """
    message = input_box.get()
    input_box.delete(0, tk.END)

    client_socket.send(message.encode())

# 创建GUI界面
window = tk.Tk()
window.title('聊天工具')

text_box = tk.Text(window)
text_box.pack()

input_box = tk.Entry(window)
input_box.pack()

send_button = tk.Button(window, text='发送', command=send_message)
send_button.pack()

# 启动客户端
client_socket = None
start_client()

window.mainloop()

这段代码使用了socket模块来实现网络通信,服务端程序使用socket的bind()和listen()方法来监听客户端连接,然后创建一个新的线程来接收客户端消息。客户端程序使用socket的connect()方法连接到服务器,然后创建一个新的线程来接收服务器消息。

GUI界面使用了tkinter模块,创建了一个窗口,包含一个文本框用于显示消息,一个输入框用于输入消息,以及一个发送按钮。用户可以在输入框中输入消息,点击发送按钮发送消息给服务器或其他客户端,接收到的消息会显示在文本框中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值