• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python实现网络聊天室的示例代码(支持多人聊天与私聊)

python 搞代码 4年前 (2022-01-08) 20次浏览 已收录 0个评论

这篇文章主要介绍了Python实现网络聊天室的示例代码(支持多人聊天与私聊),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

实验名称:

网络聊天室

功能:

i. 掌握利用Socket进行编程的技术
ii. 掌握多线程技术,保证双方可以同时发送
iii. 建立聊天工具
iv. 可以和单人聊天
v. 可以和多个人同时进行聊天
vi. 使用图形界面,显示双方的语录
vii. 程序可以在一定程度上进行错误识别

概述

实验通过聊天室可以完成单人或多人之间的聊天通信,功能的实现主要是通过Socket通信来实现。本次实验采用客户端/服务器(C/S)架构模式,通过Python语言来编写服务器端与客户端的程序。运用多线程可完成多点对多点的聊天。
服务器端程序主要用于接收用户信息,消息接收与转发。
客户端程序实现用户注册登录,聊天信息显示与信息输入。

代码解释

统计当前在线人数,并且将新用户加到用户列表中。
Serve.py

这是服务器对于聊天服务的实现。

通过继承threading.Thread类而实现多线程,重写run函数。

接受来自客户端的用户名,如果用户名为空,使用用户的IP与端口作为用户名。如果用户名出现重复,则在出现的用户名依此加上后缀“2”、“3”、“4”……

在获取用户名后便会不断地接受用户端发来的消息(即聊天内容),结束后关闭连接。

如果用户断开连接,将该用户从用户列表中删除,然后更新用户列表。

将地址与数据(需发送给客户端)存入messages队列。

服务端在接受到数据后,会对其进行一些处理然后发送给客户端,如下图,对于聊天内容,服务端直接发送给客户端,而对于用户列表,便由json.dumps处理后发送。

Client.py
建立连接,发送用户名及判断是否为私聊消息,私聊用~识别

接受来自服务器发送的消息

对接收到的消息进行判断,如果是在线用户列表(用json.dumps处理过),便清空在线用户列表框,并将此列表输出在在线用户列表框中。

如果是聊天内容,便将其输出在聊天内容显示框中。

设置登录窗口

设置消息界面

设置在线用户列表。

完整代码:
Serve.py

 import socket import threading import queue import json # json.dumps(some)打包 json.loads(some)解包 import os import os.path import sys IP = '127.0.0.1' PORT = 9999 # 端口 messages = queue.Queue() users = [] # 0:userName 1:connection lock = threading.Lock() def onlines(): # 统计当前在线人员 online = [] for i in range(len(users)): online.append(users[i][0]) return online class ChatServer(threading.Thread): global users, que, lock def __init__(self): # 构造函数 threading.Thread.__init__(self) self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) os.chdir(sys.path[0]) # 接受来自客户端的用户名,如果用户名为空,使用用户的IP与端口作为用户名。如果用户名出现重复,则在出现的用户名依此加上后缀“2”、“3”、“4”…… def receive(self, conn, addr): # 接收消息 user = conn.recv(1024) # 用户名称 user = user.decode() if user == '用户名不存在': user = addr[0] + ':' + str(addr[1]) tag = 1 temp = user for i in range(len(users)): # 检验重名,则在重名用户后加数字 if users[i][0] == user: tag = tag + 1 user = temp + str(tag) users.append((user, conn)) USERS = onlines() self.Load(USERS,addr) # 在获取用户名后便会不断地接受用户端发来的消息(即聊天内容),结束后关闭连接。 try: while True: message = conn.recv(1024) # 发送消息 message = message.decode() message = user + ':' + message self.Load(message,addr) conn.close() # 如果用户断开连接,将该用户从用户列表中删除,然后更新用户列表。 except: j = 0 # 用来源gaodai$ma#com搞$代*码*网户断开连接 for man in users: if man[0] == user: users.pop(j) # 服务器段删除退出的用户 break j = j+1 USERS = onlines(

以上就是Python实现网络聊天室的示例代码(支持多人聊天与私聊)的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python实现网络聊天室的示例代码(支持多人聊天与私聊)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址