仿QQ多人聊天室
下载地址:链接:https://pan.baidu.com/s/1dLFjSxwTA4gL5lI0B4UGuQ
提取码:2qs0
有两个项目,分别是服务器chatterServer和客户端chatter,先开启服务器,再开启客户端,默认8888端口。
先上图(回环测试,即自己和自己聊天):
实现的主要功能:
1、一对一聊天:连接到服务器的所有客户端和另一个客户端“一对一”聊天
2、多对多聊天:连接到服务器的所有客户端在同一聊天室内聊天
使用到的Java技术:
1、Java图形界面编程(JFrame和各种组件的使用)。还包括内部类,事件监听。
2、Java IO。主要是字节流,聊天信息通过字节流编码并发送、接收。
3、Java TCP通信。
4、Java多线程。
5、Java集合。其中一个重点是重写equals方法和hashCode方法
6、Java异常处理
代码结构:
客户端
代码分为4个包:
com.chatter.GUI | 和图形界面相关的类,主要是GUI类 |
com.chatter.client | 和客户端后台有关的类,主要是Client类 |
com.chatter.user | 和用户信息存储有关的类,包含Message类(数据的打包和解包),User类(用户信息,最后没用),PersonRecord类(用于记录和某个特定客户端的聊天记录),Record类(用于记录用户和每个其他用户的聊天记录) |
com.chatter.main | main方法 |
项目类图(客户端):
服务器只有一个类,和从客户端复制过去的一些类
主要代码如下:
UI模块:
package com.chatter.gui;
import java.awt.*;
import java.awt.event.*;
import java.util.Collection;
import java.util.HashSet;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import com.chatter.client.Client;
import com.chatter.user.Message;
import com.chatter.user.PersonRecord;
import com.chatter.user.User;
public class GUI {
Client client;
JFrame frame;
Container pane;
JPanel window, up, left, center, down;
//上方的软件名
private JLabel label;
//左侧选择聊天对象的列表
JList<String> list;
DefaultListModel<String> dlm;
//中间的聊天消息显示
JTextArea text;
//下方输入文本的区域
public JTextField words;
//发送按钮
JButton button;
final int WINDOW_WIDTH = 480;
final int WINDOW_HEIGHT = 640;
final double CUT_RATE_LEFT = 0.30;
public GUI() {
frame = new JFrame();
pane = frame.getContentPane();
window = new JPanel(new BorderLayout());
up = new UpperPanel();
left = new JPanel();
center = new JPanel();
down = new JPanel(new BorderLayout());
//上方的软件图标和名称
label = new JLabel();
label.setPreferredSize(new Dimension(150,50));
label.setFont(new Font("楷体", Font.PLAIN, 30));
label.setText("GG聊天室");
up.add(label);
pane.add(BorderLayout.NORTH, up);
//左侧的聊天对象选择栏
dlm = new DefaultListModel<String>();
list = new