这个文章用来记录一下20年的java课的结课项目。本程序基于多线程与socket套接字实现的网络聊天小程序。用户可以注册账号与密码来登入客户端系统与服务器通信。用户可以发送聊天消息给其他用户,获取历史消息,查看在线用户。用户通过客户端发送各种信息给服务器,并经由服务器处理后再将消息回复给用户和其他在线用户。源码链接在文章的结尾,如果有需要的朋友可以拿去斧正一下~谢谢)感谢交流学习。
- 下面是软件的效果图 :
- 下面是用例图和类图 :
- 下面是每个类的各个方法的具体实现功能的介绍和变量的功能 :
客户端的类的表格:
类名 | 属性/方法 | 描述 |
Client | String binPath | 存储工作路径的变量 |
File f | 将login_config.txt存储在工作路径,该文件存储用户登录界面保存的密码和单选框的状态选择 | |
HashMap login_config | 用于存储用户登录界面保存的密码和单选框的状态选择,之后将map输出到login_config.txt | |
String server_address | 保存要连接的服务器ip地址 | |
port | 保存要连接的服务器监听的端口 | |
Client() | Client类的构造方法,创建组件生成界面并根据login_config.txt向组件中填入保存的账号和密码 | |
main(String[] args) | 程序入口,设置框架属性. | |
boolean flag | 用来判断是否画出确认密码的界面。 | |
actionPerformed(ActionEvent e) | 监听‘注册’和‘登录’按钮。并实现按钮的功能 | |
Chat_UI | String binPath | 存储工作路径的变量 |
Chat_UI(String user_name) | Client类的构造方法,创建组件生成界面. | |
setDocs(JTextPane pan,String str,Color col,boolean bold,int size) | 实现给文本组件添加可以设置颜色的文本,bold为设置是否为粗体。 | |
HeartThread | 发送心跳包的线程,每发送10次心跳包向服务器获取一次在线用户列表并将内容显示在GUI。每次发送心跳包都向服务器询问有没有新的其他用户的新消息并显示在GUI。 | |
main(String user_name) | 生成并显示聊天界面和组件,定义按钮组件和回车键的监听事件。 | |
sumit | String updata(String data) | 实现与服务器利用socket进行通信,发送String并返回服务器回复的String。 |
客户端类表格:
类名 | 属性/方法 | 描述 |
Server | ServerSocket server | 定义的server socket |
String binPath | 存储工作路径的变量 | |
HashMap<String,List> online_user | 保存在线用户和他接受到的别人的消息。Map的键为用户名,值为保存其他用户聊天消息的list。 | |
HashMap <String,Long>online_keep | 保存在线用户的用户名和他发送心跳包时保存的时间戳。用于判断用户还是否在线. | |
int port | 保存服务器监听的端口。 | |
main(String args[]) | 程序主入口,实例界面,开启监听的线程,开启利用心跳包判断用户是否仍然在线的线程。 | |
OnlineThread | 实现因客户端因不明原因无法正常注销的情况下,判断用户是否还在线的线程。 | |
ServerThread | 开启服务器监听的线程,每有一个新的socket连接就创建新的线程。 | |
boolean flag | 在ServerThread线程中用于判断用户是否选择关闭服务器监听。 | |
Task | ServerThread线程监听到新链接后创建新的线程调用此线程。Task会创建一个新的socket与客户端连接并调用handleSocket() | |
handleSocket() | 实现读取客户端发送来的消息,处理消息,并回复. | |
UI | server的内部类,实现GUI创建和按钮监听。 | |
UI(ServerThread ST) | UI类的构造函数 | |
GUIPringStream | JTextComponent component | 目标输出 GUI 组件 |
GUIPrintStream(OutputStream out, JTextComponent component) | GUIPringStream的构造方法,传入流和输出组件。 | |
GUIPringStream | 该类用于将流输出到GUI文本组件。 |
- 小结:如果想要客户端正常运行,需要先运行服务器的程序。这是个一学期课余完成的项目,安全方面根本就没有考虑过,有很多地方不是特别完善,见笑了)还有各种线程写的比较乱…但是加深了自己对socket的了解还是很不错的)下面是源码的下载链接。如果有问题可以加q或者微信来交流喔)
文件下载 | 文件名称:chat_room.zip | 文件大小:14KB |
下载声明:本站文件大多来自于网络,仅供学习和研究使用,不得用于商业用途,如有版权问题,请联系博猪! | ||
下载地址:聊天室源码下载 |