049--python--多人聊天室案例

多人聊天室:业务分析
1、可以有多个客户端,每个客户端都有自己的名字(唯一)。
2、客户端可以发送一条消息到聊天室,所有人都可以看到刚刚发送的该条消息。
3、客户端只有一个,服务单独的主线程启动和管理服务器。
4、在服务器中如果有一个客户端连接成功之后,开启一个新的线程和当前客户端会话。
5、客户端和服务器端都有界面。
首先从客户端开始
1、开发客户端界面:使用wxpython模块开发UI。
2、开发服务器端页面,并初始化一些属性。
3、当服务器启动之后,如果客户端连接,则需要创建对应的会话线程。
4、客户端连接服务器。
5、服务器再收到客户端连接之后,需要再文本框中显示提示信息,同时还需要通知所有的客户端。
6、客户端发送消息到聊天室
7、客户端断开连接

聊天室客户端:

import wx
from socket import *
import threading
class Client(wx.Frame):

        def __init__(self, c_name):   # c_name客户端名字
            # 调用父类初始化函数
            wx.Frame.__init__(self, None, id=101, title='%s的客户端界面' % c_name, pos=wx.DefaultPosition, size=(500, 700))
            pl = wx.Panel(self)  # 在窗口中初始化一个面板

            # 在面板里面回放一些按钮、文本框、文本输入框等,把这些对象统一放入一个盒子里面
            box = wx.BoxSizer(wx.VERTICAL)  # 在盒子里面垂直方向自动排版
            g1 = wx.FlexGridSizer(wx.HORIZONTAL)  # 创建可伸缩的网格水平布局

            # 创建两个按钮
            conn_button = wx.Button(pl, size=(250, 40), label="连接")
            dis_conn_button = wx.Button(pl, size=(250, 40), label="断开")
            g1.Add(conn_button, 1, wx.Top | wx.LEFT)  # 链接按钮布局在左边
            g1.Add(dis_conn_button, 1, wx.Top | wx.RIGHT)  # 断开按钮布局在右边
            box.Add(g1, 1, wx.ALIGN_CENTER)  # ALIGN_CENTER两个按钮联合居中

            # 创建聊天内容的文本框,不能写消息:wx.TE_MULTILINE-->多行, wx.TE_READONLY-->只读
            self.text = wx.TextCtrl(pl, size=(500, 400), style=wx.TE_MULTILINE | wx.TE_READONLY)
            box.Add(self.text, 1, wx.ALIGN_CENTER)
            # 创建聊天的输入文本框,可以写内容
            self.input_text = wx.TextCtrl(pl, size=(500, 180), style=wx.TE_MULTILINE)
            box.Add(self.input_text, 1, wx.ALIGN_CENTER)
            
            # 再创建两个按钮,分别为发送和重置
            g2 = wx.FlexGridSizer(wx.HORIZONTAL)
            clear_button = wx.Button(pl, size=(250, 40),
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、 系统概要 1、 开发平台: Windows XP, Visual C++ 6.0 2、 系统简单描述: 这是一个用VC做的简单的聊天系统。在此系统中,采用TCP协议,程序分为服务器端各客户端。系统能实现简单的聊天室功能包括一对多,而且同时也支持一对一,即私聊功能。在系统运行中,用户可以随时更改自己的用户名。功能虽然单一但也能够满足聊天的基本功能。 二、 通信规范的制作 程序中定义了一个结构体MYMESSAGE来作为信息传送的载体 struct MESSAGE { char flag; //作为标志来区别所发送的信息; char data[100];//发送的内容; char addr[25]; //客户IP地址和端口号 }; 三、 主要模块的设计分析 服务器端: 系统流程如下: 设计思路: 基于TCP/IP的通信基本上都是利用SOCKET套接字进行数据通讯,程序一般分为服务器端和用户端两部分。设计思路(VC6.0下): 第一部分 服务器端 一、创建服务器套接字(create)。 二、服务器套接字进行信息绑定(bind),并开始监听连接(listen)。 三、接受来自用户端的连接请求(accept)。 四、开始数据传输(send/receive)。 五、关闭套接字(closesocket)。 第二部分 客户端 一、创建客户套接字(create)。 二、与远程服务器进行连接(connect),如被接受则创建接收进程。 三、开始数据传输(send/receive)。 四、关闭套接字(closesocket)。
实现一个简单的 Python 多人聊天室可以分为以下几个步骤: 1. 创建服务器端和客户端程序。 2. 在服务器端程序中,创建一个 socket 对象,指定地址和端口号,并且监听来自客户端的连接请求。 3. 在客户端程序中,创建一个 socket 对象,指定服务器的地址和端口号,并且向服务器发送连接请求。 4. 服务器端程序接收客户端的连接请求后,创建一个新的线程,处理与客户端的通信。 5. 客户端程序连接成功后,创建两个线程,分别处理发送和接收消息的功能。 6. 服务器端程序接收到客户端发送的消息后,将消息广播给所有连接到服务器的客户端。 以下是一个简单的 Python 多人聊天室的代码示例: 服务器端代码: ```python import threading import socket def handle_client(client_socket, addr): while True: data = client_socket.recv(1024) if not data: break broadcast(data) client_socket.close() def broadcast(message): for client in clients: client.send(message) server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', 8888)) server_socket.listen(5) clients = [] while True: client_socket, addr = server_socket.accept() clients.append(client_socket) thread = threading.Thread(target=handle_client, args=(client_socket, addr)) thread.start() ``` 客户端代码: ```python import threading import socket def receive(): while True: data = client_socket.recv(1024) print(data.decode()) def send(): while True: message = input() client_socket.send(message.encode()) client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect(('localhost', 8888)) thread_receive = threading.Thread(target=receive) thread_send = threading.Thread(target=send) thread_receive.start() thread_send.start() ``` 注意:以上代码示例仅用于演示多人聊天室的基本原理,实际应用中还需要考虑更多的安全性、可扩展性等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值