# chatting-box **Repository Path**: yanfsong/chatting-box ## Basic Information - **Project Name**: chatting-box - **Description**: python基于socket的服务器-客户端聊天软件。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-21 - **Last Updated**: 2024-10-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 实验一:聊天程序设计 1(服务器和客户机之间的连接) #### 一、 实验要求 设计一个实时聊天的小程序,用 Socket 编程实现面向连接的 C/S 的网络通讯。为方便用户交互, 采用图形化的用户界面实现“服务器和客户机之间的连接”的功能 #### 二、实验结果与说明 \1. 首先运行服务器端(绿色窗口),然后运行客户端(黄色窗口),此时有色部分为空。 ![img](mdpic/clip_image002.jpg) \2. 点击客户端的Connect按钮,使客户端向服务器端发送请求。服务器端显示客户端IP和端口号;客户端显示服务器端返回的当前时间。 ![img](file:///mdpic/clip_image004.jpg) #### 三、实验难点 首先是python的图形界面编程,完全是从零起步。 其次是服务器监听程序和图形界面刷新显示的双循环问题,尝试将两循环合并,未果,最后为服务器监听程序单独开辟线程。 #### 四、参考资料 Python官方文档:https://docs.python.org/zh-cn/3/library/socket.html?highlight=socket#socket.socket.connect Python线程库介绍 https://www.cnblogs.com/guyuyun/p/11185832.html python图形界面编程 https://www.bilibili.com/video/BV1jW411Y7dL?p=2 ### 实验二:聊天程序设计 2(一对一消息发送与接收) #### 一、 实验要求 在聊天程序设计 1 的基础上, 采用图形化的用户界面实现“一对一的实时消息发送和接收”的功能,并结合数据库或文件操作记录即时通信的历史聊天记录。 #### 二、实验结果与说明 \1. 运行服务器端(绿色窗口)与客户端(黄色窗口),先启动的窗口有色部分为空,待另一窗口启动后,服务器端将显示客户端地址,客户端显示服务器连接成功。在双方连接成功后,还将显示最近5条对话记录。对话将显示在上方文本框中,每条对话在本身的信息之上显示其发送方和发送时间,服务器端标记红色,客户端标记蓝色。 ![img](file:///mdpic/clip_image006.jpg) ![img](file:///mdpic/clip_image008.jpg) \2. 在任意一端的下方文本框中输入文字,然后点击发送按钮,即可在双方文本框中显示该条信息,并将这条信息通过服务端保存到数据库中。 ![img](file:///mdpic/clip_image010.jpg) 课后特更改程序,为客户端与服务器端增加IP与PORT输入口,使用户可自行更改地址。 ![img](file:///mdpic/clip_image012.jpg) #### 三、实验难点 涉及到的对象变多,面向过程的编程很零碎,转换了代码风格。 合理安排多线程的使用以处理接收信息、维持界面和未连接状态下的持续试探。 为增加服务器与客户端的断连重连功能,对多线程的生命周期做了控制,尤其在python线程管理无关闭线程这一功能的情况下。 访问数据库的ORM技术,与将数据库存储改为文件存储过程中的数据接口错误。 #### 四、参考资料 peewee官方文档:http://docs.peewee-orm.com/en/latest/peewee/querying.html#sorting-records Python线程库介绍: https://www.cnblogs.com/guyuyun/p/11185832.html 他人示例: https://blog.csdn.net/whimewcm/article/details/85041692 ### 实验三: 聊天程序设计 3(一对一的文件收发) ## 一、 实验要求 在聊天程序设计 2 的基础上, 采用图形化的用户界面增加“一对一的即时文 #### 二、实验结果与说明 \1. 运行服务端与客户端 ![img](file:///mdpic/clip_image014.jpg) \2. 启动服务端与客户端 ![img](file:///mdpic/clip_image016.jpg) \3. 点击任意一端下方的文件按钮,即可选择文件发送对方。 ![img](file:///mdpic/clip_image018.jpg) #### 三、实验难点 由于增加功能而重构代码,导致双端的连接与退出不够清晰,试验期间经常出现端口无法关闭,程序卡死的情况,通过端关闭时向对方发送信息改善。 #### 四、参考资料 Python线程库介绍: https://www.cnblogs.com/guyuyun/p/11185832.html ### 实验四:聊天程序设计之 4(好友在线、 离线留言与通知) #### 一、 实验要求 在聊天程序设计 3 的基础上, 采用图形化的用户界面增加“好友在线”管理 功能, 对在线和离线的好友分别进行标注,以及好友添加、删除和显示等。 采用图形化的用户界面增加“离线留言与通知”功能,实现聊天好友离线时的留言与 通知。 #### 二、实验结果与说明 \1. 运行服务端与客户端 ![img](file:///mdpic/clip_image020.jpg) \2. 启动服务端与客户端的socket连接 ![img](file:///mdpic/clip_image022.jpg) \3. 客户端登录 ![img](file:///mdpic/clip_image024.jpg) \4. 好友登录 ![img](file:///mdpic/clip_image026.jpg) \5. 好友下线 ![img](file:///mdpic/clip_image028.jpg) \6. 添加删除好友 ![img](file:///mdpic/clip_image030.jpg) ![img](file:///mdpic/clip_image032.jpg) #### 三、实验难点 添加多张表,用于存储好友关系,用户信息 登录校验,好友信息发送与解析 确保信息发送至正确的客户端 #### 四、参考资料 Python tkinter Listbox 介绍: https://blog.csdn.net/qq_41556318/article/details/85108351 ### 实验五: 多线程编程 #### 一、 实验要求 在聊天程序设计 4 的基础上, 采用多线程的实现技术实现一个人同时跟多人聊天的功能。在程序中,可以设置加入连接的最大数目,通过更改 IP 地址和端口号,成为不同的客户端,与服务器端连接,进行多用户聊天。总之,实现一个小型聊天程序, 满足以下主要功能要求: 1) 即时文字交流 2) 即时文件收发 3) 离线留言与通知 4) 消息记录 ## 二、实验结果与说明 \1. 运行服务端与客户端 ![img](file:///mdpic/clip_image034.jpg) \2. 启动服务端与客户端 ![img](file:///mdpic/clip_image036.jpg) \3. 启动第二客户端 ![img](file:///mdpic/clip_image038.jpg) \4. 向选定的客户端发信 ![img](file:///mdpic/clip_image040.jpg) #### 三、实验难点 功能的复杂度和代码量都不再适合单类文件,故对代码重构,生成界面、通信和整合三个server相关类 各个server相关对象的创建、线程管理、通信 Server对各个client的管理 #### 四、参考资料 Python tkinter listbox: **https://blog.csdn.net/qq_41556318/article/details/85108351** ** ** ### 实验六: Web 浏览器编程 #### 一、 实验要求 基于 HTTP 协议使用 CHtmlView 类来实现一个应用程序,使之具有 Web 浏览器的功能,包括浏览网页、前进、后退、返回主页和保存最近浏览网页的历史记录功能, 通过实例,重点掌握利用 CHtmlView 类开发 Web 客户端程序的方法。 主要功能应当包括: (1) 浏览网页主要要求能在网址输入栏中输入所需要浏览的网址后,打开所需要浏览的网页或 Html 文件。 (2) 前进、后退通过选择前进、后退按钮,可以对当前浏览器中显示的网页内容前进到下一个网页或退到前一个网页。 (3) 返回主页通过选择返回主页按钮,可以对当前浏览器中显示的网页内容回到主页。 (4)历史记录保存最近浏览网页的历史记录(至少 4 个) #### 二、实验结果与说明 \1. 运行浏览器 ![img](file:///mdpic/clip_image042.jpg) \2. 访问页面 ![img](file:///mdpic/clip_image044.jpg) \3. 返回主页 ![img](file:///mdpic/clip_image046.jpg) \4. 后退前进 ![img](file:///mdpic/clip_image048.jpg) ![img](file:///mdpic/clip_image050.jpg) #### 三、实验难点 学习使用新的python库PyQt及其Web组件,没能实现历史记录功能。 #### 四、参考资料 PyQt浏览器介绍: https://zhuanlan.zhihu.com/p/137198066