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
建⽴连接,发送⽤户名及判断是否为私聊消息,私聊⽤~识别
python新手代码示例
接受来⾃服务器发送的消息
对接收到的消息进⾏判断,如果是在线⽤户列表(⽤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 = v(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 = v(1024)      # 发送消息

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。