這篇文章主要講解了“如何用Java實現(xiàn)多人聊天室”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何用Java實現(xiàn)多人聊天室”吧!
創(chuàng)新互聯(lián)成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目成都網(wǎng)站建設、成都做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元汕頭做網(wǎng)站,已為上家服務,為汕頭各地企業(yè)和個人服務,聯(lián)系電話:18982081108
工具類:
該類用于關閉各種流。
public class CloseUtil { public static void CloseAll(Closeable... closeable){ for(Closeable c:closeable){ if (c != null) { try { c.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
服務器:
服務器端創(chuàng)建一個serverSocket對象通過accept()方法監(jiān)聽是否有tcp連接,同時有一個儲存socket對象的集合將連接進來的對象儲存到List集合中,服務器將消息進行轉發(fā)。
//服務器 public class Server { //存儲每一個連接進來的客戶端 public static List<MyChannel> list=new ArrayList<>(); public static void main(String[] args) throws Exception { //創(chuàng)建ServerSocket對象 ServerSocket serverSocket = new ServerSocket(9999); while (true){ //連接進來的客戶端 Socket client = serverSocket.accept(); System.out.println(client.getInetAddress()+"進入聊天室"); MyChannel myChannel = new MyChannel(client); list.add(myChannel); new Thread(myChannel).start(); } } }
消息轉發(fā)類:
具體的消息轉發(fā)實現(xiàn)類,將信息發(fā)給除發(fā)送消息以外的其他客戶端。
//用于信息轉發(fā) public class MyChannel implements Runnable{ private DataInputStream dis; private DataOutputStream dos; private boolean flag=true; public MyChannel(Socket socket) { try{ dis=new DataInputStream(socket.getInputStream()); dos=new DataOutputStream(socket.getOutputStream()); }catch (IOException e){ flag=false; CloseUtil.CloseAll(dis,dos); } } //接收數(shù)據(jù)的方法 private String receive(){ String str=""; try{ str= dis.readUTF(); }catch (IOException e){ flag=false; CloseUtil.CloseAll(dis,dos); Server.list.remove(this); } return str; } //發(fā)送數(shù)據(jù)的方法 private void send(String str){ try { if (str != null && str.length() != 0) { dos.writeUTF(str); dos.flush(); } }catch (Exception exception){ flag=false; CloseUtil.CloseAll(dos,dis); Server.list.remove(this); } } //轉發(fā)消息的方法 private void sendToOther(){ String str=this.receive(); List<MyChannel> list = Server.list; for (MyChannel other:list) { if(other==list){ continue;//不發(fā)送信息給自己 } //將消息發(fā)送給其他客戶端 other.send(str); } } @Override public void run() { while (flag){ sendToOther(); } } }
發(fā)送信息類:用于從鍵盤上獲取數(shù)據(jù)然后將數(shù)據(jù)發(fā)送出去
public class Send implements Runnable{ //從鍵盤上獲取數(shù)據(jù) private BufferedReader br; private DataOutputStream dos; private boolean flag=true; public Send() { br=new BufferedReader(new InputStreamReader(System.in)); } public Send(Socket socket){ this(); try{ dos=new DataOutputStream(socket.getOutputStream()); }catch (Exception e){ flag=false; CloseUtil.CloseAll(dos,socket); e.printStackTrace(); } } private String getMessage(){ String str=""; try{ str=br.readLine(); }catch (IOException e){ flag=false; CloseUtil.CloseAll(br); } return str; } private void send(String str){ try { dos.writeUTF(str); dos.flush(); } catch (IOException e) { flag=false; CloseUtil.CloseAll(dos); e.printStackTrace(); } } @Override public void run() { while (flag){ this.send(getMessage()); } } }
信息接收類:
public class Receive implements Runnable{ //接受數(shù)據(jù)流 private DataInputStream dis; private boolean flag=true; public Receive(Socket socket){ try { dis = new DataInputStream(socket.getInputStream()); }catch (Exception e){ flag=false; CloseUtil.CloseAll(dis,socket); } } private String getMessage(){ String str=""; try { str=dis.readUTF(); } catch (IOException e) { flag=false; CloseUtil.CloseAll(dis); e.printStackTrace(); } return str; } @Override public void run() { while (flag){ System.out.println(this.getMessage()); } } }
客戶端:
public class client { public static void main(String[] args) throws Exception{ Socket socket = new Socket(InetAddress.getLocalHost(),9999); Send send = new Send(socket); Receive receive = new Receive(socket); new Thread(send).start(); new Thread(receive).start(); } }
先將服務器啟動然后啟動客戶端:測試結果如下 有喜歡的小伙伴可以自己拿去玩,代碼復制直接有效。
感謝各位的閱讀,以上就是“如何用Java實現(xiàn)多人聊天室”的內容了,經(jīng)過本文的學習后,相信大家對如何用Java實現(xiàn)多人聊天室這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!
網(wǎng)頁名稱:如何用Java實現(xiàn)多人聊天室
文章地址:http://jinyejixie.com/article16/gpeigg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供云服務器、ChatGPT、品牌網(wǎng)站建設、網(wǎng)站改版、網(wǎng)站營銷、關鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)