<b id="yt35u"></b>
  • <b id="yt35u"></b>

  • <tt id="yt35u"><form id="yt35u"></form></tt>
    <button id="yt35u"></button>

    <button id="yt35u"></button>

    <strike id="yt35u"><dfn id="yt35u"></dfn></strike>

    <i id="yt35u"></i>
    1. <tt id="yt35u"></tt>
      <b id="yt35u"><sub id="yt35u"><tr id="yt35u"></tr></sub></b>

      教育路上

      全國站>Java>網絡編程>java聊天室服務器端程序
      學員需求

      java聊天室服務器端程序

      摘要:聊天室服務器端程序任務介紹:編寫一個聊天室服務器端程序,該程序負責管理客戶端連接并轉發客戶端聊天信息。。以下是我們為大家整理的,相信大家閱讀完后肯定有了自己的選擇吧。

      2022-06-13 13:31網絡推薦

      發布時間:
      2022-06-13 13:31
      信息來源:
      網絡推薦
      瀏覽次數:
      1092
      java聊天室服務器端程序

      聊天室服務器端程序
      任務介紹:編寫一個聊天室服務器端程序,該程序負責管理客戶端連接并轉發客戶端聊天信
      息。
      任務目標:掌握網絡相關 API,掌握聊天室服務器端的實現思路。
      實現思路:在服務器端通過 SocketServer 來監聽指定端口,當有客戶端連接請求到達時,在
      服務器端啟動一個新線程來處理與該客戶端的信息交換,并將處理信息的 Socket 對象添加
      到在線列表中,當客戶端發送信息到服務器端是,根據信息類型,服務器負責向所有活動的

      客戶端或指定客戶端轉發信息。

      from shengerguan

      實現代碼:

      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();
      	}
      }

      上一篇:
      Java TCP 案例-文件上傳
      下一篇:
      java網絡聊天室客戶端
      標簽:
      網友評論
      發布評論

      訪客的評論 2023/11/08 20:52

      文中描述的是準確的嗎,如何報名!

      相關推薦
      我也來發表評價關閉
      我對該內容的評價:
      0
      評價500
      驗證碼: 看不清 換一張
      提交 (匿名發布,無須擔心別人知道您的身份)
      學校免費發布信息關閉
      我們審核后會盡快展示,如有圖片請發郵件到:edu63@foxmail.com

      姓      名:

      內      容:

      手機號碼:

      驗  證  碼:  換一張

      確認提交
      填寫需求信息關閉
      我們會根據您的需求匹配并審核留言

      姓      名:

      意向城市:

      留      言:

      手機號碼:

      驗  證  碼:  換一張

      確認提交
      完善補充本文信息關閉
      非常感謝您幫助完善補充本文信息


       換一張

      確認提交
      女班长给我看她的小内内

        <b id="yt35u"></b>
    1. <b id="yt35u"></b>

    2. <tt id="yt35u"><form id="yt35u"></form></tt>
      <button id="yt35u"></button>

      <button id="yt35u"></button>

      <strike id="yt35u"><dfn id="yt35u"></dfn></strike>

      <i id="yt35u"></i>
      1. <tt id="yt35u"></tt>
        <b id="yt35u"><sub id="yt35u"><tr id="yt35u"></tr></sub></b>