Java聊天室搭建__Java

來源:互聯網
上載者:User

做這個項目前需要先做好分析: 聊天室分為兩個模組,伺服器和用戶端。 伺服器主要實現邏輯是:用戶端第一次進入聊天室列印歡迎日誌、接收用戶端的訊息列印在聊天室中、群發給其他使用者、判斷私聊的條件。 用戶端主要實現邏輯是:初始化資訊、發送訊息給伺服器、接收來自伺服器的訊息。 項目從簡單版本往上寫,逐步增加功能:      第一個版本:通過TCP搭建伺服器和用戶端,一個用戶端上線伺服器就列印一條上線提示。      第二個版本:用戶端發送一條訊息,伺服器接收一條,並反饋一條已接收的資訊給用戶端。      第三個版本:通過多線程使用戶端能不斷給伺服器發送訊息,伺服器也能不斷回複用戶端的資訊。      第四個版本:多個用戶端開啟時,自身發送的訊息由伺服器發給其他所有用戶端,在聊天室中列印出以用戶端姓名為首碼的每個人發出的訊息。      第五個版本:判斷哪些是私聊的資訊,私聊資訊既不列印在聊天室中也只會發送給目前使用者的私聊對象。完善代碼。 伺服器代碼:來一個用戶端就開啟一個伺服器線程。具體邏輯放線上程中完成。 public class Server {       public static void main(String[] args ) throws IOException {           List< ServerThread> list = new ArrayList<ServerThread>(); //判斷私聊時需要知道發送給哪個用戶端,所以把為每一個用戶端服務的線程放入一個集合中。以此來遍曆所以用戶端。           ServerSocket serverSocket = new ServerSocket(8080);            while ( true ){               Socket socket = serverSocket .accept();                ServerThread serverThread = new ServerThread( socket , list ); //開啟線程時把當前用戶端對應通訊端和裝有所有serverThread對象的集合傳遞給為當前用戶端服務的線程。                list .add( serverThread ); //開啟一個就往list中添加一個。                serverThread .start();           }      } } 用戶端代碼:讀入鍵盤輸入資料,發送給伺服器,並接收來自伺服器的訊息。讀和寫分別使用不同的線程。 public class Client {       public static void main(String[] args ) throws UnknownHostException, IOException {           Socket socket = new Socket( "10.2.155.91" , 8080); //通過伺服器ip地址和伺服器連接埠號碼建立與伺服器的串連。           WriterThread writerThread = new WriterThread( socket ); //開啟一個寫線程發送資料到伺服器。            writerThread .start();           ReaderThread readerThread = new ReaderThread( socket ); //開啟一個讀線程接收來自伺服器的訊息。            readerThread .start();      } } 伺服器線程代碼: public class ServerThread extends Thread{       private Socket socket ;       private BufferedReader bReader ;       private BufferedWriter bWriter ;       private List<ServerThread> list ;       private String name ;       public ServerThread(Socket socket ,List<ServerThread> list ) {            try {                this . socket = socket ;                this . list = list ;                bReader = new BufferedReader( new InputStreamReader( socket .getInputStream()));                bWriter = new BufferedWriter( new OutputStreamWriter( socket .getOutputStream()));           } catch (IOException e ) {                e .printStackTrace();           }      }       public void run() {           WelcomeChat();            try {                while ( true ){                    String info = bReader .readLine();                     if ( info .startsWith( "@" )&& info .indexOf( "#" ) !=-1&&                               info .indexOf( "#" )- info .indexOf( "@" )>1) {                         SendByName( info );                    }                     else {                         System. out .println( name + "說:" + info );                         SendToOthers( info );                    }               }           } catch (IOException e

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.