【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】


目录

    • (一)效果截图展示
    • (二)代码示例
    • (三)获取

(一)效果截图展示 项目很基础,展示一些实现的基本界面,如下:
【【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】】启动服务器:
这个界面用来记录系统当前有多少用户登录,以及用户的登录状态,用户之间的交互状态等。同时也可以保存日志。
【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

启动用户登录界面:
【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

我们先来注册一下几个用户:
(点击上图中的 注册 即可)
这是 注册 的初始化界面:
【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

注册用户:
【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

这里我们注册一个用户,用户名:小红,口令:123。
其中,基本的出错处理都已经实现,比如 注册的用户已经存在,则会提示:
【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

诸如此,两次密码输入不一致、年龄输入不合法、电子邮箱格式不合法等都会提示消息,告知用户注册失败,这里我们不再展示。
我们再注册两个用户,便于演示系统功能:
【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

另一方面,在注册用户成功的同时,来看一下服务器端的显示:
可以看到,很清晰的记录了用户的注册。
【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

下面,我们来分别登录刚刚注册过的三个用户:
这是三个用户登录之后,用户 小红 这一端的窗口显示:
(当小红首先登录之后,当然在线人数会是 显示 1,随着用户分别登录或退出,在线人数也会依次增加或减少,这是基础功能)
【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

服务器端显示:
也是清楚的记录了用户登录的时间
【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

下面再来测试 聊天 这一核心功能:
首先是 群聊,顾名思义,就是用户的发言,所有用户都等看到:
小红说:大家好!我是小红~
【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

上面是小红的发言窗口,下面我们以用户 小明的 窗口再来看看:(小刚的窗口也是类似,这里不再展示)
可以看出来,群聊这一功能,实现成功。
【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

下面是私聊这一功能:
小明对小红 私聊说:可以交个朋友吗?
【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

小红这端显示:
【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

那么此时,我们再来看一下 用户 小刚 这里的显示:
【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

可以看出来,私聊这个功能,也已经实现。
这时,我们来看一下服务器端的显示:
【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

我们设置的用户的群聊信息在服务器端可以展示,私聊需要额外设计展示方式。同时,服务器端可以向所有用户发送信息:
服务端端(即系统)说:大家好!我是服务器。
【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

用户这一端,我们 以 小红 的窗口为例展示:
可以看到“系统消息”,说明这个功能也已经实现。
【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

用户退出之后,服务器端显示:
【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】
文章图片

同时,清屏、保存、退出等基础功能也已经实现,这里不再展示了哈~ ~
项目的界面展示到此结束,不再赘述了。
(二)代码示例
Login.java

import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.net.*; import java.io.*; /** * 聊天系统登录程序 */ public class Login extends JFrame implements ActionListener { private static final long serialVersionUID = -8965773902056088264L; private JPanel pnlLogin; private JButton btnLogin, btnRegister, btnExit; private JLabel lblServer, lblUserName, lblPassword, lblLogo; private JTextField txtUserName, txtServer; private JPasswordField pwdPassword; private String strServerIp; // 用于将窗口定位 private Dimension scrnsize; private Toolkit toolkit = Toolkit.getDefaultToolkit(); /** * 构造登陆窗体 */ public Login() { super("登录聊天室"); pnlLogin = new JPanel(); this.getContentPane().add(pnlLogin); lblServer = new JLabel("服务器:"); lblUserName = new JLabel("用户名:"); lblPassword = new JLabel("口令:"); txtServer = new JTextField(20); txtServer.setText("127.0.0.1"); txtUserName = new JTextField(20); pwdPassword = new JPasswordField(20); btnLogin = new JButton("登录"); btnLogin.setToolTipText("登录到服务器"); btnLogin.setMnemonic('L'); btnRegister = new JButton("注册"); btnRegister.setToolTipText("注册新用户"); btnRegister.setMnemonic('R'); btnExit = new JButton("退出"); btnExit.setToolTipText("退出系统"); btnExit.setMnemonic('X'); /*********************************************************************** * 该布局采用手动布局 setBounds设置组件位置 * setFont设置字体、字型、字号 * setForeground设置文字的颜色 * * setBackground设置背景色 * setOpaque将背景设置为透明 */ pnlLogin.setLayout(null); // 组件用手动布局 pnlLogin.setBackground(new Color(52, 130, 203)); lblServer.setBounds(50, 100, 100, 30); txtServer.setBounds(150, 100, 120, 25); lblUserName.setBounds(50, 130, 100, 30); txtUserName.setBounds(150, 130, 120, 25); lblPassword.setBounds(50, 160, 100, 30); pwdPassword.setBounds(150, 160, 120, 25); btnLogin.setBounds(50, 200, 80, 25); btnRegister.setBounds(130, 200, 80, 25); btnExit.setBounds(210, 200, 80, 25); Font fontstr = new Font("宋体", Font.PLAIN, 12); lblServer.setFont(fontstr); txtServer.setFont(fontstr); lblUserName.setFont(fontstr); txtUserName.setFont(fontstr); lblPassword.setFont(fontstr); pwdPassword.setFont(fontstr); btnLogin.setFont(fontstr); btnRegister.setFont(fontstr); btnExit.setFont(fontstr); lblUserName.setForeground(Color.BLACK); lblPassword.setForeground(Color.BLACK); btnLogin.setBackground(Color.ORANGE); btnRegister.setBackground(Color.ORANGE); btnExit.setBackground(Color.ORANGE); pnlLogin.add(lblServer); pnlLogin.add(txtServer); pnlLogin.add(lblUserName); pnlLogin.add(txtUserName); pnlLogin.add(lblPassword); pnlLogin.add(pwdPassword); pnlLogin.add(btnLogin); pnlLogin.add(btnRegister); pnlLogin.add(btnExit); // 设置背景图片 Icon logo1 = new ImageIcon("images\\loginlogo.jpg"); lblLogo = new JLabel(logo1); lblLogo.setBounds(0, 0, 340, 66); pnlLogin.add(lblLogo); // 设置登录窗口 setResizable(false); setSize(340, 260); setVisible(true); scrnsize = toolkit.getScreenSize(); setLocation(scrnsize.width / 2 - this.getWidth() / 2, scrnsize.height / 2 - this.getHeight() / 2); Image img = toolkit.getImage("images\\appico.jpg"); setIconImage(img); // 三个按钮注册监听 btnLogin.addActionListener(this); btnRegister.addActionListener(this); btnExit.addActionListener(this); } // 构造方法结束 /** * 按钮监听响应 */ @SuppressWarnings({ "deprecation", "static-access" }) public void actionPerformed(ActionEvent ae) { Object source = ae.getSource(); if (source.equals(btnLogin)) { // 判断用户名和密码是否为空 if (txtUserName.getText().equals("") || pwdPassword.getText().equals("")) { JOptionPane op1 = new JOptionPane(); op1.showMessageDialog(null, "用户名或密码不能为空"); } else { strServerIp = txtServer.getText(); login(); } } if (source.equals(btnRegister)) { strServerIp = txtServer.getText(); this.dispose(); new Register(strServerIp); } if (source == btnExit) { System.exit(0); } } // actionPerformed()结束 /** * 登录事件响应方法 */ @SuppressWarnings("deprecation") public void login() { // 接受客户的详细资料 Customer data = https://www.it610.com/article/new Customer(); data.custName = txtUserName.getText(); data.custPassword = pwdPassword.getText(); try { // 连接到服务器 Socket toServer; toServer = new Socket(strServerIp, 1001); ObjectOutputStream streamToServer = new ObjectOutputStream(toServer .getOutputStream()); // 写客户详细资料到服务器socket streamToServer.writeObject((Customer) data); // 读来自服务器socket的登录状态 BufferedReader fromServer = new BufferedReader( new InputStreamReader(toServer.getInputStream())); String status = fromServer.readLine(); if (status.equals("登录成功")) { new ChatRoom((String) data.custName, strServerIp); this.dispose(); // 关闭流对象 streamToServer.close(); fromServer.close(); toServer.close(); } else { JOptionPane.showMessageDialog(null, status); // 关闭流对象 streamToServer.close(); fromServer.close(); toServer.close(); } } catch (ConnectException e1) { JOptionPane.showMessageDialog(null, "未能建立到指定服务器的连接!"); } catch (InvalidClassException e2) { JOptionPane.showMessageDialog(null, "类错误!"); } catch (NotSerializableException e3) { JOptionPane.showMessageDialog(null, "对象未序列化!"); } catch (IOException e4) { JOptionPane.showMessageDialog(null, "不能写入到指定服务器!"); } } // login()结束 /** * 启动登陆窗体 * @param args */ public static void main(String args[]) { new Login(); } } // Class Login结束

由于代码行过长,仅展示这一个文件。
(三)获取
聊天室系统包含项目所有 源代码以及 论文资料、 视频讲解说明、 项目部署过程、 项目截图项目学习路线、已经注册过的用户信息记录等等,需要该项目的朋友请私聊我哈!有空回复
~

    推荐阅读