教育路上
摘要:聊天室服務器端程序任務介紹:編寫一個聊天室服務器端程序,該程序負責管理客戶端連接并轉發客戶端聊天信息。。以下是我們為大家整理的,相信大家閱讀完后肯定有了自己的選擇吧。
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(); } }
訪客的評論 2023/11/08 20:52
文中描述的是準確的嗎,如何報名!