IT俱乐部 Java Java聊天室之实现聊天室客户端功能

Java聊天室之实现聊天室客户端功能

一、题目描述

题目实现:实现聊天室客户端。运行程序,用户登录服务器后,可以从用户列表中选择单个用户进行聊天,也可以选择多个用户进行聊天。

二、解题思路

创建一个服务类:ChatClientFrame,继承JFrame类。用于进行用户登录、发送聊天信息和显示聊天信息,在该类中完成窗体界面的设计。

定义createClientSocket)方法,用于创建套接字对象、输出流对象以及启动线程对象对服务器转发的信息进行处理。

定义内部线程类ClientThread,用于对服务器端转发的信息进行处理,并显示在相应的控件中。

定义发送聊天信息的send()方法。

技术重点:

通过线程对接收到的信息进行处理,其中分为3种情况,第一种接收到的是登录用户,第二种接收到的是退出提示,第三种接收到的是消息。

使用maven-assembly-plugin插件,把引用的第三方jar包打到项目的jar包中。

启动上一题的服务端,运行服务端

启动多个客户端:

java -jar basics100-1.0-SNAPSHOT.jar

三、代码详解

引入hutool的pom,和使用maven-assembly-plugin插件

1
4.0.0com.xiaoxuzhubasics1001.0-SNAPSHOTcn.hutoolhutool-core5.6.5maven-assembly-plugincom.xiaoxuzhu.ChatClientFrame.jar-with-dependenciesfalsemake-assemblypackagesingle

ChatClientFrame

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package com.xiaoxuzhu;
 
import cn.hutool.core.io.resource.ResourceUtil;
 
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.URL;
import java.net.UnknownHostException;
import java.text.DateFormat;
import java.util.Date;
import java.util.Vector;
 
import javax.swing.*;
 
/**
 * Description:
 *
 * @author xiaoxuzhu
 * @version 1.0
 *
 * <pre> * 修改记录:
 * 修改后版本            修改人     修改日期            修改内容
 * 2022/6/6.1       xiaoxuzhu       2022/6/6            Create
 * </pre>
<p> * @date 2022/6/6<br>
 */</p>
<p>public class ChatClientFrame extends JFrame {<br>
    private JTextField tf_newUser;<br>
    private JList user_list;<br>
    private JTextArea ta_info;<br>
    private JTextField tf_send;<br>
    private ObjectOutputStream out;// 声明输出流对象<br>
    private Socket socket;<br>
    private boolean loginFlag = false;// 为true时表示已经登录,为false时表示未登录</p>
<p>    public static void main(String args[]) {<br>
        System.out.println(SwingUtilities.isEventDispatchThread());<br>
        EventQueue.invokeLater(new Runnable() {<br>
            public void run() {<br>
                System.out.println(SwingUtilities.isEventDispatchThread());<br>
                try {<br>
                    ChatClientFrame frame = new ChatClientFrame();<br>
                    frame.setVisible(true);<br>
                    frame.createClientSocket();// 调用方法创建套接字对象<br>
                } catch (Exception e) {<br>
                    e.printStackTrace();<br>
                }<br>
            }<br>
        });<br>
    }</p>
<p>    public void createClientSocket() {<br>
        try {<br>
             socket = new Socket("127.0.0.1", 9527);// 创建套接字对象<br>
            out = new ObjectOutputStream(socket.getOutputStream());// 创建输出流对象<br>
            SwingWorker worker=new SwingWorker() {<br>
                @Override<br>
                protected Void doInBackground() throws Exception {<br>
                    try {<br>
                        System.out.println(SwingUtilities.isEventDispatchThread());<br>
                        BufferedReader in = new BufferedReader(new InputStreamReader(<br>
                                socket.getInputStream()));// 创建输入流对象<br>
                        DefaultComboBoxModel model = (DefaultComboBoxModel) user_list<br>
                                .getModel();// 获得列表框的模型<br>
                        while (true) {<br>
                            String info = in.readLine().trim();// 读取信息<br>
                            if (!info.startsWith("MSG:")) {// 接收到的不是消息<br>
                                if (info.startsWith("退出:")) {// 接收到的是退出消息<br>
                                    model.removeElement(info.substring(3));// 从用户列表中移除用户<br>
                                } else {// 接收到的是登录用户<br>
                                    boolean itemFlag = false;// 标记是否为列表框添加列表项,为true不添加,为false添加<br>
                                    for (int i = 0; i  v = new Vector();// 创建向量对象,用于存储发送的消息<br>
        Object[] receiveUserNames = user_list.getSelectedValues();// 获得选择的用户数组<br>
        if (receiveUserNames.length </p>

上一题服务端启动:

第一个客户端:小小 启动

第二个客户端:虚虚 启动

第三个客户端:竹竹 启动

小小给竹竹发消息

竹竹回复小小:

小小收到回复:

以上就是Java聊天室之实现聊天室客户端功能的详细内容,更多关于Java聊天室的资料请关注IT俱乐部其它相关文章!

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/code/java/5370.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部