美国上市公司,专注Java培训22年

Chat项目增加输入昵称和私聊功能,秒变约炮神器!


Chat项目增加输入昵称和私聊功能,秒变约炮神器!

大家好,周六复习时发现本周day06课后作业有道题是要增加Chat聊天室输入昵称和私聊功能。我大概写了一下,实现了这两个功能,分享给大家看看哈!

看到题目后我的第一个想法就是将我们保存PrintWriter的List换成Map,这样就可以存储昵称,估计也可以根据昵称进行私聊(还没来得及看作业的代码,估计也是这么实现的吧,可能有更好的办法)。于是我就把List<rintWriter>改为了Map 。key用来存PrintWriter对应的昵称(name)。class Server修改后的代码如下:

01.<p>        private synchronized void addOut(String name,PrintWriter out){
 
02.                allOut.put(name,out);
 
03.        }
 
04.        private synchronized void remove(String name){
 
05.                allOut.remove(name);
 
06.        }
 
07.        private synchronized void sendToAll(String message){
 
08.                Set<String> keySet = allOut.keySet();
 
09.                for(String name : keySet){
 
10.                        allOut.get(name).println(message);
 
11.                }
 
12.        }
 
13.        private synchronized String sendToSb(String name,String message){
 
14.                PrintWriter out = allOut.get(name);
 
15.                int start1 = message.indexOf("\\" + name +":") + ("\\" + name +":").length();
 
16.                String message1 = message.substring(start1);
 
17.                int end2 = message.indexOf("说");
 
18.                String message2 = message.substring(0, end2);
 
19.                out.println(message2 + "对你说:" + message1);
 
20.                return "你对" + name + "说:" + message1;
 
21.        }
 
22.</p><p><span></span> </p>

代码中增加了synchronize的sendToSb方法,就是私聊功能。

下面是对这几个方法的调用,稍微有些变化,用正则表达式去除了私聊中输入的无用代码(如:\范老师:),并提取了昵称(name),代码如下:

01.class SendMessageHandler implements Runnable{
 
02.                public void run(){
 
03.                        try {                        
 
04.                                OutputStream in = socket.getOutputStream();
 
05.                                PrintWriter pw = new PrintWriter(new OutputStreamWriter(in,"UTF-8"),true);
 
06.                                Scanner scan = new Scanner(System.in);
 
07.                                System.out.println("请输入昵称:");
 
08.                                String name = scan.nextLine();
 
09.                                pw.println(name + "上线了!");
 
10.                                GetMessageHandler handler = new GetMessageHandler();
 
11.                                Thread t2 = new Thread(handler);
 
12.                                t2.start();
 
13.                                while(true){
 
14.                                        String message = scan.nextLine();
 
15.                                        pw.println(name + "说:" + message);
 
16.                                }
 
17.                        } catch (Exception e) {
 
18.                                // TODO Auto-generated catch block
 
19.                                e.printStackTrace();
 
20.
 
21.                        }
 
22.                        
 
23.                }
 
24.        }
差不多就这些,现在运行一下吧。


【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!

Java开发高端课程免费试学

大咖讲师+项目实战全面提升你的职场竞争力

  • 海量实战教程
  • 1V1答疑解惑
  • 行业动态分析
  • 大神学习路径图

相关推荐

更多

Java开班时间

收起