Java ServerSocket 实现聊天室功能(简易版) 大体实现功能可以选择房间可以与房间中的用户进行实时的交流说在前面的话:serverSocket.accept() 会形成阻塞scanner.hasNextLine() 和 scanner.nextLine() 也会形成阻塞windows 下需要打开telnet服务。请自行百度实现思路:用户连接上服务器后选择房间号进入房间。进入房间后会向房间中所有的用户打印出用户进入房间的提醒。用户进入房间后输入姓名即可发言。说起来很简单代码实现更简单。我们需要一个保存房间用户的容器。我这里使用的是。// 保存聊天室中的用户数据privatestaticMapString,ListMapString,PrintWritercharScnnerMapnewHashMap();使用 try-with-resource 语法防止出现资源未关闭的情况出现。直接上代码packagecom.annie;importcom.sun.org.apache.xml.internal.resolver.readers.ExtendedXMLCatalogReader;importjava.io.*;importjava.net.ServerSocket;importjava.net.Socket;importjava.util.*;publicclassApp{// 保存聊天室中的用户数据privatestaticMapString,ListMapString,PrintWritercharScnnerMapnewHashMap();publicstaticvoidprint(ListMapString,PrintWritercharNames,String conn){for(MapString,PrintWritercharName:charNames){SetMap.EntryString,PrintWriterentriescharName.entrySet();for(Map.EntryString,PrintWriterentry:entries){entry.getValue().println(conn);}}}publicstaticvoidmain(String[]args)throwsInterruptedException{charScnnerMap.put(1,newArrayListMapString,PrintWriter());charScnnerMap.put(2,newArrayListMapString,PrintWriter());charScnnerMap.put(3,newArrayListMapString,PrintWriter());// 监控本机端口 9189try(ServerSocket serverSocketnewServerSocket(9189)){while(true){Socket acceptserverSocket.accept();newThread(()-{try(InputStream inputStreamaccept.getInputStream();OutputStream outputStreamaccept.getOutputStream();Scanner scannernewScanner(inputStream,UTF-8);PrintWriter outnewPrintWriter(newOutputStreamWriter(outputStream,UTF-8),true)){// 定位房间String number-1;out.println(Please enter the room number.(1-3): );numberscanner.nextLine();if(!number.equals(1)!number.equals(2)!number.equals(3)){while(true){out.println(Please enter the correct room.(1-3): );numberscanner.nextLine();if(number.equals(1)||number.equals(2)||number.equals(3)){break;}}}// 显示姓名out.println(Please enter your name: );String namescanner.nextLine();ListMapString,PrintWritercharNamescharScnnerMap.get(number);MapString,PrintWritermnewHashMap();m.put(name,out);charNames.add(m);// 打印内容print(charNames,Welcome [name] to the room.);booleanbtrue;while(bscanner.hasNextLine()){String sscanner.nextLine();print(charNames,name: s);if(s.equals(BB)){print(charNames,[name]Exit the room);bfalse;}}}catch(Exceptione){e.printStackTrace();}}).start();}}catch(IOExceptione){e.printStackTrace();}}}扩展内容github个人博客