WxxShirley / Chatroom

💻基于socket网络聊天室,计算机网络课程pj。v2.0多人群聊,好友间私聊
6 stars 0 forks source link
chatroom socket-programming tkinter-gui

Chatroom

计算机网络课程pj,基于socket的网络聊天室。

环境

运行方法

功能 version2.0

目前已经实现的功能有:

协议设计

客户端

编号 助记符 消息体格式 应用场景
1 LOGIN str(LOGIN) + username + "\r\n" + pwd 用户登陆
2 REGISTER str(REGISTER) + user + "\r\n" + pwd 用户注册
3 SEND_MESSAGE header :str(SEND_MESSAGE) + "\r\n" + str(len(text)), content:send_text 多人群聊中用户发送消息
4 GET_ALL_USERS str(GET_ALL_USERS) 登陆多人聊天室后获得当前所有在线用户
5 GET_ALL_CHAT_HISTORY str(GET_ALL_CHAT_HISTORY) + username 登陆多人聊天室后获得所有历史聊天记录
6 SEND_EMOJI header :str(SEND_EMOJI) + "\r\n" + str(len(emoji)),content: emoji 多人群聊中用户发送表情符号
7 SEND_FILE header : file_info = str(SEND_FILE) + receiver + "\r\n" + filename + "\r\n" +str(file_size), content : file content 多人群聊中用户发送文件
8 GET_ALL_FILE_HISTORY str(GET_ALL_FILE_HISTORY) 登陆多人聊天室后获得所有发送文件的历史记录
9 ADD_FRIEND header:str(ADD_FRIEND),content:source_user+"\r\n"+target_user 添加好友
99 DOWNFILE header:str(DOWNFILE),content:username+"\r\n"+filename 用户下载任意多人群聊中已经上传的文件
98 PRIVATE_INIT header:str(PRIVATE_INIT) + username + "\r\n" + friend_name | 获得用户与friend_name间的所有聊天记录
0 SHOW_ALL_FRIENDS header:str(SHOW_ALL_FRIENDS),content:username 获得用户所有好友名

服务端

编号 助记符 应用场景
101 LOGIN_SUCCESS 用户登录成功
102 LOGIN_WRONG_PWD 用户登录时密码错误
103 LOGIN_ACCOUNT_NOT_EXIST 用户登录时账号不存在
104 LOGIN_DUPLICATE 登陆时账号重复
105 LOGIN_USERNAME 用户登录时以广播方式通知所有其他用户
201 REGISTER_SUCCESS 注册新账号成功
202 REGISTER_ERROR 注册新账号失败
301 SEND_MESSAGE_ALL 多人聊天室中发送消息成功
302 SEND_MESSAGE_ERROR 多人聊天室中发送消息失败
303 SEND_MESSAGE_PER 好友间私聊时对方在线,成功发送消息
304 SEND_MESSAGE_PER_STORE 好友间私聊时对方不在线,消息缓存到双方的聊天记录中
404 GET_USERS_ERROR 获取所有在线用户的用户名失败
401 GET_SUCCESS 成功获取所有在线用户的用户名
501 RET_HISTORY_SUCCESS 成功获取多人聊天室中所有聊天记录
502 RET_HISTORY_ERROR 获取多人聊天室中所有聊天记录失败
601 SEND_EMOJI_SUCCESS 成功发送表情符号
602 SEND_EMOJI_ERROR 发送表情符号失败
701 SEND_FILE_SUCCESS 成功发送文件
702 SEND_FILE_ERROR 发送文件失败
801 RET_ALL_FILES_SUCCESS 成功获取所有发送的文件名
802 RET_ALL_FILES_ERROR 获取所有发送的文件名失败
800 LOGOUT_INFO 用户登出时以广播方式通知所有其他用户
901 ADD_FRIEND_SUCCESS 成功添加好友
902 ALREADY_ADD_ERROR 添加好友错误:与对方已经是好友关系
903 USERNAME_NOT_EXIST 添加好友错误:输入的用户名不存在
904 ADD_FRIEND_ERROR 添加好友错误:其他异常错误
905 ADD_FRIEND_REMIND 新好友提示:在线时收到其他用户的好友请求
290 DOWNFILE_SUCCESS 成功下载多人群聊中的文件
291 DOWNFILE_ERROR 下载多人群聊中的文件失败
292 PRIVATE_INIT_SUCCESS 成功获得用户与某一好友所有聊天记录
293 PRIVATE_INIT_NONE 用户与某一好友间聊天记录为空
294 PRIVATE_INIT_ERROR 获取用户与某一好友所有聊天记录发送错误
295 SHOW_FRIENDS_SUCCESS 成功获取用户的所有好友名
296 SHOW_FRIENDS_ERROR 获取用户的所有好友发生错误
297 NO_FRIENDS 用户暂无好友

在设计的时候不足之处

整体架构

数据库关系模式

服务端逻辑

客户端逻辑

用户端开启时进入登陆界面,第一次进入欢迎界面时,与服务端连接并建立会话.登陆成功后,开启监听服务端发来的数据。

 sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    try:
        sock.connect((HOST,PORT))
        print(sock)
    except:
        print("Fail to connect (%s,%s)"%(HOST,PORT))

文件结构

└  client.py    % 客户端
└  server.py    % 服务端
└  constant.py  % 协议编号
└  method.py    % socket方法,包括send\receive等
└  events.py    % 客户端部分事件函数
└  database.py  % 数据库操作函数

运行截图

未来工作

待完善的功能