深度解析Wand-Enhancer:5个高级技巧彻底解锁WeMod专业版功能
2026/7/28 17:36:40
说在前面的话:
serverSocket.accept() 会形成阻塞
scanner.hasNextLine() 和 scanner.nextLine() 也会形成阻塞
windows 下需要打开telnet服务。请自行百度
实现思路:
- 用户连接上服务器后选择房间号,进入房间。进入房间后会向房间中所有的用户打印出用户进入房间的提醒。
- 用户进入房间后,输入姓名即可发言。
// 保存聊天室中的用户数据privatestaticMap<String,List<Map<String,PrintWriter>>>charScnnerMap=newHashMap<>();packagecom.annie;importcom.sun.org.apache.xml.internal.resolver.readers.ExtendedXMLCatalogReader;importjava.io.*;importjava.net.ServerSocket;importjava.net.Socket;importjava.util.*;publicclassApp{// 保存聊天室中的用户数据privatestaticMap<String,List<Map<String,PrintWriter>>>charScnnerMap=newHashMap<>();publicstaticvoidprint(List<Map<String,PrintWriter>>charNames,String conn){for(Map<String,PrintWriter>charName:charNames){Set<Map.Entry<String,PrintWriter>>entries=charName.entrySet();for(Map.Entry<String,PrintWriter>entry:entries){entry.getValue().println(conn);}}}publicstaticvoidmain(String[]args)throwsInterruptedException{charScnnerMap.put("1",newArrayList<Map<String,PrintWriter>>());charScnnerMap.put("2",newArrayList<Map<String,PrintWriter>>());charScnnerMap.put("3",newArrayList<Map<String,PrintWriter>>());// 监控本机端口 9189try(ServerSocket serverSocket=newServerSocket(9189)){while(true){Socket accept=serverSocket.accept();newThread(()->{try(InputStream inputStream=accept.getInputStream();OutputStream outputStream=accept.getOutputStream();Scanner scanner=newScanner(inputStream,"UTF-8");PrintWriter out=newPrintWriter(newOutputStreamWriter(outputStream,"UTF-8"),true)){// 定位房间String number="-1";out.println("Please enter the room number.(1-3): ");number=scanner.nextLine();if(!number.equals("1")&&!number.equals("2")&&!number.equals("3")){while(true){out.println("Please enter the correct room.(1-3): ");number=scanner.nextLine();if(number.equals("1")||number.equals("2")||number.equals("3")){break;}}}// 显示姓名out.println("Please enter your name: ");String name=scanner.nextLine();List<Map<String,PrintWriter>>charNames=charScnnerMap.get(number);Map<String,PrintWriter>m=newHashMap<>();m.put(name,out);charNames.add(m);// 打印内容print(charNames,"Welcome ["+name+"] to the room.");booleanb=true;while(b&&scanner.hasNextLine()){String s=scanner.nextLine();print(charNames,name+": "+s);if(s.equals("BB")){print(charNames,"["+name+"]Exit the room");b=false;}}}catch(Exceptione){e.printStackTrace();}}).start();}}catch(IOExceptione){e.printStackTrace();}}}扩展内容
github
个人博客