实验名称:
网络聊天室
功能:
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处理过),便清空在线用户列表框,并将此列表输出在在线用户列