教育路上
摘要:聊天室服务器端程序任务介绍:编写一个聊天室服务器端程序,该程序负责管理客户端连接并转发客户端聊天信息。。以下是我们为大家整理的,相信大家阅读完后肯定有了自己的选择吧。
2022-06-13 13:31网络推荐
客户端或指定客户端转发信息。
实现代码:
package aw; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.HashMap; import java.util.Scanner; import java.util.Set; public class ChatRoomServer { private ServerSocket serverSocket; private HashMap<String,Socket> userList; private Socket socket; public ChatRoomServer() { try { serverSocket = new ServerSocket(6666); userList = new HashMap(100); System.out.println("服务器已启动"); while (true) { socket = serverSocket.accept(); new Thread(new ServerResponse(socket)).start(); System.out.println("有用户连接"); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } class ServerResponse implements Runnable { Socket Socket; BufferedInputStream bis; public ServerResponse(Socket s) { // TODO Auto-generated constructor stub socket = s; } @Override public void run() { // TODO Auto-generated method stub try { bis = new BufferedInputStream(socket.getInputStream()); Scanner scanner = new Scanner(bis); while (true) { String rawString = scanner.nextLine(); String[] str = rawString.split("@"); switch (str[0]) { case "WELCOME": responseWelcome(str[1], socket); responseUserList(socket); break; case "COMMEN": responseCommen(str[1], str[2], socket); break; case "PRIVACY": responsePrivacy(str[1], str[2], str[3], socket); break; case "QUIT": break; } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void responsePrivacy(String senderName, String ReciverName, String msg, Socket socket) { // TODO Auto-generated method stub PrintWriter pw; Set users = userList.keySet(); Socket so = userList.get(ReciverName); try { pw = new PrintWriter(new BufferedOutputStream(so.getOutputStream())); pw.println("PRIVACY@" + senderName + "@" + msg); pw.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void responseCommen(String senderName, String msg, Socket socket) { // TODO Auto-generated method stub PrintWriter pw; Set<String> users = userList.keySet(); for (String user : users) { if (senderName.equals(user)) continue; Socket so = userList.get(user); try { pw = new PrintWriter(new BufferedOutputStream(so.getOutputStream())); pw.println("COMMEN@" + msg); pw.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private void responseUserList(java.net.Socket socket) { // TODO Auto-generated method stub Set users = userList.keySet(); Object[] names = users.toArray(); StringBuilder sb = new StringBuilder(); for (Object name : names) sb.append("@" + (String) name); try { PrintWriter pw = new PrintWriter(new BufferedOutputStream(socket.getOutputStream())); pw.println("LIST" + sb.toString()); pw.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void responseWelcome(String userName, Socket s) { PrintWriter pw; userList.put(userName, s); Set<String> users = userList.keySet(); for (String user : users) { Socket so = userList.get(user); try { pw = new PrintWriter(new BufferedOutputStream(so.getOutputStream())); pw.println("WELCOME@" + userName); pw.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main(String[] arg) { ChatRoomServer server = new ChatRoomServer(); } }
访客的评论 2024/07/27 15:17
文中描述的是准确的吗,如何报名!