基于Python guI的多人聊天室的设计与实现

这篇具有很好参考价值的文章主要介绍了基于Python guI的多人聊天室的设计与实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于Python guI的多人聊天室的设计与实现 

摘要

现在,即时聊天系统已成为 Internet 上的主要交流工具,并且涌现出大量的AP和平台。这些AP和平台都拥有更加完善的交换机制,使得人们可以更加便捷地进行沟通和交换信息。

广域网的聊天系统多重多样,知名的软件主要有 Facebook、腾讯 QQ 等。局域网聊天通信软件也有很多,最著名的应该是飞秋。为了学习和应用 Windows 网络通信编程,我们学习了相关知识,为了应用实践,使用网络通信中的 TCP 和 UDP 编程,实现了多人在线聊天系统。

这个项目旨在提供一个便捷的、高效的社交空间,它利用python的tkinter、threading、soket等多线程库,可以轻松地建立起一个多种社交模式,既可以进行群组交流,也可以进行个人私信,甚至可以发布表情包。该项目由两个部件组成:一个是服务器,负责处理所有的数据。另一个是通讯设备,负责处理所有的文件。两个部件都使用Tcp协议来实现互联互通。

关键词

多人聊天室;Soket;tcp;python

目录

1、引言

1.1 背景和意义

1.2 系统要实现的功能

1.2.1 用户登录

1.2.2 群发消息

1.2.3 一对一聊天

1.2.4 发送表情

2、系统结构

2.1 系统结构图

2.2 系统实现原理

2.2.1服务器端实现原理

2.2.2 客户端实现原理

2.3 系统技术分析

2.3.1 tkinter 图形用户界面库

2.3.2 threading 多线程

2.3.3 socket 网络编程

3、实现代码

3.1服务器端代码

3.1.1确定全局变量

3.1.2实现多线程接收数据

3.1.3处理接收到的数据

3.1.4将在线用户存入online列表并返回

3.1.5删除用户

3.1.6发送消息

3.1.7 主函数

3.2 客户端代码

3.2.1确定全局变量

3.2.2登录窗口实现

3.2.4 创建聊天窗口

3.2.5 发送数据

3.2.6 实现私聊

3.2.7 接收数据并打印

3.2.8 主函数

4、实验结果

4.1 用户登录

4.2 群发消息

4.3 一对一聊天

4.4 发送表情

5、总结和展望

5.1项目总结

5.2 项目展望

参考文献

致  谢

附  录


1、引言

1.1 背景和意义

        随着互联网时代的到来,人与人之间的联系更加紧密。在现实生活中需要一个契机才有机会进行深入的沟通,人们对彼此的了解仅仅是浅层的,而在线的聊天则可以让我们抛开一切外在的东西,用语言去了解一个人的内在。

1.2 系统要实现的功能

1.2.1 用户登录

用户使用默认的服务器端口地址,输入昵称,接着点击‘登录’按钮,实现登录聊天系统。

1.2.2 群发消息

点击列表,然后选择点击消息中的群发,写好想发的消息后点发送按钮就可以群发消息。

1.2.3 一对一聊天

点击列表,然后选择点击消息中的对象,选择好想要发送的人,此,写好想发的消息后点击发送按钮就可以对当前那个人一对一的去聊天。

1.2.4 发送表情

用户点击‘表情’按钮,此时点击需要发送的表情即可发送

2、系统结构

2.1 系统结构图

        分成了服务端与客户端,选择采用Tcp协议传输数据与网络。存储用户连接的信息在于服务器,包括用户的IP地址、端口、用户信息等。

2.2 系统实现原理

系统采用C/S模式进行实现

2.2.1服务器端实现原理

        登录和接收数据实现原理 :采用tcp协议,对自己定义的端口进行监听,监听到有新的端口,就会创造出新的出来。

        发送数据实现原理:启动服务器后,新建一个线程,检查消息队列中的数据是否为空,如果不为空,则调用发送数据函数等。

2.2.2 客户端实现原理

        数据传输实现原理:客户数据以(消息内容:;当前用户:;目标用户)的形式发送给服务器,服务器将消息转发给目标用户。

        数据接收执行原理:客户端接收到数据后,分析数据判断是否为笑脸信息,如果是则搜索笑脸词对应的图片显示在聊天信息中;如果不是笑脸消息 smiley message,则该消息会直接显示在聊天消息中。

2.3 系统技术分析

2.3.1 tkinter 图形用户界面库

        Tkinter:一种基于 Python 的 Tk GUI 界面,它的Tkinter 接口为大多数 Unix 、 Windows 、 Macintosh等操作环境提供了一种便捷的界面,从而大大提高了编程的效率。Tk8.0 的更新版能够提供更加逼真的本地窗体体验,而且能够轻松适用于大多数AP。

2.3.2 threading 多线程

        ​ 所有的线程均拥有一组CPU寄存器,这些寄存器构成一条记录着它们之前在某一时刻的操作的路径,从而构成一条完整的路径。

        指令指针与堆栈指针寄存器被认为是处理单个线程的关键设备,它们可以指示单个线程的位置,并且可以帮助单个线程更好的理解单个线程的功能。

2.3.3 socket 网络编程

 Python 为用户带来两种不同等级的互联互通功能。

网络服务的低端版本通常只支持 Socket,但也可以使用标准的 BSD Sockets来实现高级功能。

通过Socket接口,用户可以获取到底层操作系统的所有功能。

SocketServer是一种先进且功能强大的网络服务模块,其能够为用户节省大量时间和资源,从而大大降低网络架构设计成本。

Socket,也被称为"套接字",是一种通信技术,它能够让不同的主机或单台计算机之间的进程之间实现有效的连接,从而实现"套接字"的请求和响应。

在Python 中,socket()是一种常见的连接方式,它可以帮助构造出复杂的连接字。

socket.socket([family[, type[, proto]]])

​ 参数:

family:通过将AF_UNIX和AF_INET连接起来,我们能够创建一个family。

type:套接字的类型可以根据它们的用途来划分,有些是用于连接,而有些则是用于非连接。

​ protocol: 一般不填默认为0.

3、实现代码

3.1服务器端代码

3.1.1确定全局变量

IP = ''

PORT = 80808

Errque =errqueue.eeeQueue()          

 usersewrew = [ewe]

 [weceweonn, ewewuser, eweweaddr]

ewelocewewk = thwewereading.Lewwewock() 

      

3.1.2实现多线程接收数据

class ChatServer(threading.Thread):

    def __init__(self, port):

        threading.Thread.__init__(self)

        self.ADDR = ('', port)

        self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 用于接收所有客户端发送信息的函数

    def tcp_connect(self, conn, addr):

    pass;

    # 每当接收到一个socket 连接就为其创建并启动一个新的线程

    def run(self):

        self.s.bind(self.ADDR)

        self.s.listen(5)

        print('服务器正在运行中...')

        q = threading.Thread(target=self.sendData)

        q.start()

        while True:

            conn, addr = self.s.accept()

            t = threading.Thread(target=self.tcp_connect, args=(conn, addr))

            t.start()

        self.s.close()

3.1.3处理接收到的数据

# 将接收到的信息(ip,端口以及发送的信息)存入que队列

def recv(self, data, addr):

    lock.acquire()

    try:

        que.put((addr, data))

    finally:

        lock.release()

# 用于接收所有客户端发送信息,并将数据保存到消息队列中

def tcp_connect(self, conn, addr):

    # 连接后将用户信息添加到users列表

    user = conn.recv(1024)                 # 接收用户名

    user = user.decode()

    for i in range(len(users)):

        if user == users[i][1]:

            print('User already exist')

            user = '' + user + '_2'



    if user == 'no':

        user = addr[0] + ':' + str(addr[1])

    users.append((conn, user, addr))

    print(' 新的连接:', addr, ':', user, end='')         # 打印用户名

    d = onlines()                  # 有新连接则刷新客户端的在线用户显示

    self.recv(d, addr)

    try:

        while True:

            data = conn.recv(1024)

            data = data.decode()

            self.recv(data, addr)                         # 保存信息到队列

        conn.close()

    except:

        print(user + ' 断开连接')

        self.delUsers(conn, addr)                     # 将断开用户移出users

        conn.close()

3.1.4将在线用户存入online列表并返回

def onlines():

    online = []

    for i in range(len(users)):

        online.append(users[i][1])

    return online

3.1.5删除用户

 # 判断断开用户在users中是第几位并移出列表, 刷新客户端的在线用户显示

def delUsers(self, conn, addr):

    a = 0

    for i in users:

        if i[0] == conn:

            users.pop(a)

            print(' 在线用户: ', end='')       # 打印剩余在线用户(conn)

            d = onlines()

            self.recv(d, addr)

            print(d)

                break

            a += 1

3.1.6发送消息

# 将队列que中的消息发送给所有连接到的用户

def sendData(self):

    while True:

        if not que.empty():

            data = ''

            reply_text = ''

            message = que.get()                               # 取出队列第一个元素

            if isinstance(message[1], str):                   # 如果data是str则返回Ture

                for i in range(len(users)):

                    # user[i][1]是用户名, users[i][2]是addr, 将message[0]改为用户名

                    for j in range(len(users)):

                        if message[0] == users[j][2]:

                            print(' this: message is from user[{}]'.format(j))

                            data = ' ' + users[j][1] + ':' + message[1]

                            break

                    users[i][0].send(data.encode())

            # data = data.split(':;')[0]

            if isinstance(message[1], list):  # 同上

                # 如果是list则打包后直接发送  

                data = json.dumps(message[1])

                for i in range(len(users)):

                    try:

                        users[i][0].send(data.encode())

                    except:

                        pass

3.1.7 主函数

#监听服务器线程是否处于运行状态

if __name__ == '__main__':

    cserver = ChatServer(PORT)

    cserver.start()

    while True:

        time.sleep(1)

        if not cserver.isAlive():

            print("Chat connection lost...")

            sys.exit(0)

3.2 客户端代码

3.2.1确定全局变量

IP = ''

PORT = ''

user = ''

listbox1 = ''  # 用于显示在线用户的列表框

ii = 0  # 用于判断是开还是关闭列表框

users = []  # 在线用户列表

chat = '【群发】'  # 聊天对象, 默认为群聊

3.2.2登录窗口实现

# 登陆窗口

loginRoot = tkinter.Tk()

loginRoot.title('聊天室')

loginRoot['height'] = 110

loginRoot['width'] = 270

loginRoot.resizable(0, 0)  # 限制窗口大小



IP1 = tkinter.StringVar()

IP1.set('127.0.0.1:8888')  # 默认显示的ip和端口

User = tkinter.StringVar()

User.set('')

# 服务器标签

labelIP = tkinter.Label(loginRoot, text='地址:端口')

labelIP.place(x=20, y=10, width=100, height=20)



entryIP = tkinter.Entry(loginRoot, width=80, textvariable=IP1)

entryIP.place(x=120, y=10, width=130, height=20)



# 用户名标签

labelUser = tkinter.Label(loginRoot, text='昵称')

labelUser.place(x=30, y=40, width=80, height=20)

entryUser = tkinter.Entry(loginRoot, width=80, textvariable=User)

entryUser.place(x=120, y=40, width=130, height=20)





# 登录按钮

def login(*args):

    global IP, PORT, user

    IP, PORT = entryIP.get().split(':')  # 获取IP和端口号

    PORT = int(PORT)                     # 端口号需要为int类型

    user = entryUser.get()

    if not user:

        tkinter.messagebox.showerror('温馨提示', message='请输入任意的用户名!')

    else:

        loginRoot.destroy()                  # 关闭窗口

loginRoot.bind('<Return>', login)            # 回车绑定登录功能

but = tkinter.Button(loginRoot, text='登录', command=login)

but.place(x=100, y=70, width=70, height=30)



loginRoot.mainloop()

3.2.3 与服务器建立连接

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((IP, PORT))

if user:

    s.send(user.encode())  # 发送用户名

else:

    s.send('no'.encode())  # 没有输入用户名则标记no

3.2.4 创建聊天窗口

# 聊天窗口

# 创建图形界面

root = tkinter.Tk()

root.title(user)  # 窗口命名为用户名

root['height'] = 400

root['width'] = 580

root.resizable(0, 0)  # 限制窗口大小

# 创建多行文本框

listbox = ScrolledText(root)

listbox.place(x=5, y=0, width=570, height=320)

# 文本框使用的字体颜色

listbox.tag_config('red', foreground='red')

listbox.tag_config('blue', foreground='blue')

listbox.tag_config('green', foreground='green')

listbox.tag_config('pink', foreground='pink')

listbox.insert(tkinter.END, '欢迎加入聊天室 !', 'blue')

# 创建多行文本框, 显示在线用户

listbox1 = tkinter.Listbox(root)

listbox1.place(x=445, y=0, width=130, height=320)





def showUsers():

    global listbox1, ii

    if ii == 1:

        listbox1.place(x=445, y=0, width=130, height=320)

        ii = 0

    else:

        listbox1.place_forget()  # 隐藏控件

        ii = 1

# 查看在线用户按钮

button1 = tkinter.Button(root, text='用户列表', command=showUsers)

button1.place(x=485, y=320, width=90, height=30)

# 创建输入文本框和关联变量

a = tkinter.StringVar()

a.set('')

entry = tkinter.Entry(root, width=120, textvariable=a)

entry.place(x=5, y=350, width=570, height=40)

3.2.5 发送数据

def send(*args):

    # 没有添加的话发送信息时会提示没有聊天对象

    users.append('【群发】')

    print(chat)

    if chat not in users:

        tkinter.messagebox.showerror('温馨提示', message='没有聊天对象!')

        return

    if chat == user:

        tkinter.messagebox.showerror('温馨提示', message='自己不能和自己进行对话!')

        return

    mes = entry.get() + ':;' + user + ':;' + chat  # 添加聊天对象标记

    s.send(mes.encode())

a.set('')  # 发送后清空文本框

3.2.6 实现私聊

# 创建发送按钮

button = tkinter.Button(root, text='发送', command=send)

button.place(x=515, y=353, width=60, height=30)

    global chat

    # 获取点击的索引然后得到内容(用户名)

    indexs = listbox1.curselection()

    index = indexs[0]

    if index > 0:

        chat = listbox1.get(index)

        # 修改客户端名称

        if chat == '【群发】':

            root.title(user)

            return

        ti = user + '  -->  ' + chat

        root.title(ti)

# 在显示用户列表框上设置绑定事件

listbox1.bind('<ButtonRelease-1>', private)

3.2.7 接收数据并打印

def treceev():

    ttglobal tusers

    eerwhierle Trerrue:

        daereta = rerrs.recv(1024)

        daereta = daerreta.derecoerede()

               try:

            data = json.loads(data)

            useerrrs = data

            rereliserertbox1.delete(0, tkererinter.END)  # 清空列表框

            nurreerererermber = ('  errer 在线用户数: ' + str(len(data)))

            ererliserertbox1.insert(tkirenter.ErerND, numbrererr)

            listbox1.itemconfig(tkinter.END, fg='green', bg="#f0f0ff")

            listbox1.insert(tkinter.END, '【群发】')

            listbox1.itemconfig(tkinter.END, fg='green')

            for i in range(len(data)):

                listbox1.insert(tkinter.END, (data[i]))

                listbox1.itemconfig(tkinter.END, fg='green')

        except:

            data = data.split(':;')

            data1 = data[0].strip()  # 消息

            data2 = data[1]  # 发送信息的用户名

            data3 = data[2]  # 聊天对象

            markk = data1.split(':')[1]

            # 判断是不是图片

            pic = markk.split('#')

            # 判断是不是表情

            # 如果字典里有则贴图

            if (markk in dic) or pic[0] == '``':

                data4 = '\n' + data2 + ':'  # 例:名字-> \n名字:

                if data3 == '【群发】':

                    if data2 == user:  # 如果是自己则将则字体变为蓝色

                        listbox.insert(tkinter.END, data4, 'blue')

                    else:

                        listbox.insert(tkinter.END, data4, 'green')  # END将信息加在最后一行

                elif data2 == user or data3 == user:  # 显示私聊

                    listbox.insert(tkinter.END, data4, 'red')  # END将信息加在最后一行

                listbox.image_create(tkinter.END, image=dic[markk])

            else:

                data1 = '\n' + data1

                if data3 == '【群发】':

                    if data2 == user:  # 如果是自己则将则字体变为蓝色

                        listbox.insert(tkinter.END, data1, 'blue')

                    else:

                        listbeeox.insereeet(tkeeinter.END, datea1, 'gereene')  # END将信息加在最后一行

3.2.8 主函数

Tee = ssert

to.starteee()  # 开始线程接收信息



root.mainloop()

s.close()  # 关闭图形界面后关闭TCP连接

4、实验结果

4.1 用户登录

        用户只需要输入自己的昵称,并且使用默认的服务器端口地址,点击‘登录’按钮,就能够轻松访问聊天系统,如图1所示:

python实现聊天室,python,毕业设计,python,开发语言

 

图1 用户登录

4.2 群发消息

        找到列表,点击群发就可以群发消息,以群发消息为例:

python实现聊天室,python,毕业设计,python,开发语言

 

图2 群发消息

4.3 一对一聊天

        点击那个列表就可以看到,发送这个,然后发送对象,聊天的窗口标题对目标的用户,点击发消息就可以对一个人来聊天了,以我自己群发消息给为例,如图所示

python实现聊天室,python,毕业设计,python,开发语言

 

图3 一对一聊天

4.4 发送表情

        用户点击‘表情’按钮,如图所示,此时点击表情即可发送。

python实现聊天室,python,毕业设计,python,开发语言

 

图4 发送表情

5、总结和展望

5.1项目总结

这个项目旨在提供一个便捷的、高效的社交空间,它利用python的tkinter、threading、soket等多线程库,可以轻松地建立起一个多种社交模式,既可以进行群组交流,也可以进行个人私信,甚至可以发布表情包。该项目由两个部件组成:一个是服务器,负责处理所有的数据。另一个是通讯设备,负责处理所有的文件。两个部件都使用Tcp协议来实现互联互通。

5.2 项目展望

本项目实现了基本的聊天功能,后期将会加入的功能有,语音聊天、视屏聊天、文件共享等。

参考文献

[1]《信息与电脑》|2013年第008期|7-8,10-11|共4页 张海文; 2022-08-18

[2]沈健 程瑞龙  《移动信息》 2022年第9期0028-0030,共3页

[3](美) [弗格森]Derek Ferguson 著. JSP 程序调试实用手册[M]. 电子工业出版社,2001. 62~87

[4]《电脑知识与技术:学术版》|2022年第5期|61-63|共3页 袁明坤; 曾丽;

2022-9-15

[5] 谢希仁.计算机网络[M].北京:电子工业出版社,2004。

[6] W. Richard Stevens.TCP/IP详解[M].北京:机械工业出版社,2005。

[7] 张炯.Unix网络编程[M].北京:清华大学出版社,2002。

[8] 求是科技,王正军.Visual C++ 6.0从入门到精通[M].北京:人民邮电出版社,2006。

[9] 孙鑫,余安萍.VC++深入详解[M].北京:电子工业出版社,2006。

[10] 陈坚,陈伟.Visual C++ 网络高级编程[M].北京:人民邮电出版社,2001。

[11]吴志军.Visual C++视频会议开发技术与实例[M].北京:人民邮电出版社,2006。

致  谢

感谢指导老师对指导我,起到了很大的帮助作用。感谢他分享的学习成果,使我在学习及技术上少走弯路,使我的学习上更进一步。同时感谢我的父母,他们在论文期间与我交流,分担我的心理压力,在日常生活中给予我帮助,在学习精神上鼓励我。最后,向这群心甘情愿帮助我的人表示感谢和衷心的感谢。

附  录

聊天窗口

创建图形界面

root = tkinter.Tk()

root.title(user)  # 窗口命名为用户名

root['height'] = 400

root['width'] = 580

root.resizable(0, 0)  # 限制窗口大小

# 创建多行文本框

listbox = ScrolledText(root)

listbox.place(x=5, y=0, width=570, height=320)

# 文本框使用的字体颜色

listbox.tag_config('red', foreground='red')

listbox.tag_config('blue', foreground='blue')

listbox.tag_config('green', foreground='green')

listbox.tag_config('pink', foreground='pink')

listbox.insert(tkinter.END, '欢迎加入聊天室 !', 'blue')

# 创建多行文本框, 显示在线用户

listbox1 = tkinter.Listbox(root)

listbox1.place(x=445, y=0, width=130, height=320)





def showUsers():

    global listbox1, ii

    if ii == 1:

        listbox1.place(x=445, y=0, width=130, height=320)

        ii = 0

    else:

        listbox1.place_forget()  # 隐藏控件

        ii = 1

# 查看在线用户按钮

button1 = tkinter.Button(root, text='用户列表', command=showUsers)

button1.place(x=485, y=320, width=90, height=30)

# 创建输入文本框和关联变量

a = tkinter.StringVar()

a.set('')

entry = tkinter.Entry(root, width=120, textvariable=a)

entry.place(x=5, y=350, width=570, height=40)

此论文维普查重已过,23年做的,详细资料可以关注私信我,Python,Java,php,html,c语言,微信小程序,APP,安卓,物联网等毕业设计都可找我。

请关注点赞+私信博主,领取项目源码

关注博主下篇更精彩

一键三连!!!

一键三连!!!

一键三连!!!
感谢一键三连!!!

python实现聊天室,python,毕业设计,python,开发语言

python实现聊天室,python,毕业设计,python,开发语言

python实现聊天室,python,毕业设计,python,开发语言文章来源地址https://www.toymoban.com/news/detail-755006.html

到了这里,关于基于Python guI的多人聊天室的设计与实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT程序设计多人聊天室(基于QT、sqlite3、TCP/IP)

    目录 技术路线 效果展示 程序主体 sqoperator.h mylogin.h myenroll.h chatinterface.h tips.h myapp.h ******************* sqoperator.cpp mylogin.cpp myenroll.cpp chatinterface.cpp tips.cpp myapp.cpp main.cpp widget.h widget.cpp main.cpp QT程序设计、sqlite数据库调用、TCP/IP客户端与服务端的搭建 通过次程序代码,可以学习如

    2024年02月09日
    浏览(63)
  • Python多人聊天室

    链接:https://pan.baidu.com/s/1kzxiLTkvdxGAMgF3SQzcaw?pwd=vb9h 提取码:vb9h 利用socket方式编写一个多人聊天室程序,可以实现多个用户之间的群聊功能,私聊功能,显示当前用户功能 在聊天室程序中增加利用ftp实现文件的上传,下载,删除,查看当前文件功能 在聊天室程序中增加利用

    2024年02月03日
    浏览(59)
  • Linux-Socket实现模拟群聊(多人聊天室)

    简单版本 服务端源码 客户端源码 服务器可以在特定的端口监听客户端的连接请求,若连接成功,服务器采用广播的形式向当前所有连接客户端发送该客户端登录成功消息多个客户端可以同时登录,在源码文件中可以配置最多群聊同时在线人数。服务端接收到客户端发送的群

    2024年02月10日
    浏览(93)
  • WebSocket+Vue实现简易多人聊天室 以及 对异步调用的理解

    代码仓库:github   HTTP是不支持长连接的,WebSocket是一种通信协议,提供了在单一、长连接上进行全双工通信的方式。它被设计用于在Web浏览器和Web服务器之间实现,但也可以用于任何需要实时通信的应用程序。使用ws作为协议标识符,如果需要加密则使用wss作为协议标识符

    2024年01月17日
    浏览(61)
  • 基于java的聊天室系统设计与实现

    基于java的聊天室系统设计与实现 研究背景: 随着互联网技术的迅速发展和普及,在线聊天和实时通信成为人们日常交流的重要方式。聊天室系统作为实时通信的一种重要形式,具有广泛的应用场景,如远程教育、在线游戏、即时通讯、网络直播等。因此,设计和实现一个基

    2024年02月05日
    浏览(44)
  • 使用Linux系统IO多路复用中eopll创建基于TCP通信协议的多人聊天室

    一.1.搭建好TCP的通信模型 2.创建红黑树根节点 3.将套接字事件添加到红黑树中,使其被监听 4.当套接字事件发生,表示有客户端连接,将连接事件加入到红黑树节点当中 5.每当连接事件发生时,表示客户端发送信息到服务器 6.每当有事件准备就绪时,将对应的红黑树节点信息

    2024年02月13日
    浏览(45)
  • JAVA基于局域网的聊天室系统的设计与实现

           本文介绍了采用JAVA编程开发视频聊天系统的一套比较常用的解决方案。文字聊天采用TCP模式;语音视频聊天采用UDP模式,在客户端之间点对点的进行。在该方案中,通过函数库VFW来实现视频捕获、影像压缩以及影像播放。微软公司提供的专门用于视频捕获开发的工具

    2023年04月15日
    浏览(42)
  • Java 多人聊天室

    Java实训做的多人聊天室,效果如图: 能够实现多个客户端之间的互相聊天,服务端来负责接收数据和转发数据。 每个客户端可以自己设置和修改自己的名称,并传给服务器让其他客户端知道。 当有客户端加入和退出时,群聊里每个客户端都有提示。(优化了异常检测,意外

    2024年02月10日
    浏览(40)
  • 【Java socket编程】多人聊天室

    课程设计大作业 功能: 1.具有 点对点通信 功能,任意客户端之间能够发送消息。 2.具有 群组通信 功能: 客户端可以 自主建立群组 ,添加或删除组成员; 客户端能够向组内成员同时发送消息,其他组成员不能收到。 3.具有 广播 功能 客户端能够向所有其他成员 广播消息

    2024年02月04日
    浏览(40)
  • vue3-多人聊天室角色识别(全栈)

    主要技术栈是vue3,springboot,websocket,element-plus 主要目的是复习和梳理 发送信息,包装信息,转json,用socket发送到后端,使输入栏清空 后端解析json,因为是socket接口,所以不能用@requestbody解析json,用以下方式解析json 设置发送时间为当前时间,然后执行mapper数据库插入 广

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包