日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于UDP/IP协议的聊天室

發布時間:2024/3/13 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于UDP/IP协议的聊天室 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于TCP/IP通信協議的聊天室

概述:

  • 基于TCP/IP通信協議的聊天室是通過服務端/客戶端的模式進行的,必須是服務端開啟之后,客戶端通過獲取服務端的ip和端口號并連接之后才能進行信息的共享,具體的實現過程代碼如下:
package cs聊天室;import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.Collections; import java.util.List;/*** 服務端* @author 黃小寶**/ public class MyServer {//定義一個集合用來存儲所有連接到服務器的客戶端socket,并將其包裝成線程安全的static volatile List<Socket> socketList = new ArrayList<>();public static void main(String[] args) throws IOException {//創建一個服務器ServerSocket server=new ServerSocket(9999);System.out.println("服務器已創建,等待連接.......");while(true) {//開始監視,這個時候,如果沒有客戶端連接,這里會被一直阻塞Socket s=server.accept();System.out.println(s.getInetAddress().getHostName()+"連接成功");socketList.add(s);//每當一個客戶端連接后,就開啟一個線程為該客戶服務new ServerThread(s).start();}} }
  • 這個是服務端,即服務器,里面定義了端口號,因為是本機,所以在創建ServerSocket對象時,沒有添加ip地址,這個類的作用是創建一個服務器并開啟服務器,將開啟過程放在while循環里面,可以無限的接收來自客戶端的連接,并為每一個連接到服務器的客戶端創建一個線程。
package cs聊天室;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.Socket;/*** 服務端線程, 他負責為每一個客戶端提供線程服務* @author 黃小寶**/ public class ServerThread extends Thread {//定義當前線程需要處理的socketprivate Socket s;public ServerThread(Socket s) {super();this.s = s;}@Overridepublic void run() {//采用循環不斷的讀取從socket發過來的信息try {System.out.println("歡迎使用!!!");BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));String content = null;while((content=br.readLine())!=null){//遍歷集合中的每一個socket,將讀到的類容給每個socket都發一次for(Socket s:MyServer.socketList) {PrintStream ps=new PrintStream(s.getOutputStream());ps.println(content);}}} catch (IOException e) {e.printStackTrace();}}}
  • 這個類是一個線程類,是服務器用來處理來自每一個客戶端訪問的線程,他可以實現將所有客戶端發送的消息全部發送給每一個其他的客戶端,達到群聊里面每一個客戶端都能夠看到所發的消息
package cs聊天室;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintStream; import java.net.Socket; import java.net.UnknownHostException; /*** 客戶端* @author 黃小寶**/ public class MyClient {public spackage cs聊天室;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintStream; import java.net.Socket; import java.net.UnknownHostException; /*** 客戶端* @author 黃小寶**/ public class MyClient {public static void main(String[] args) throws UnknownHostException, IOException {//創建客戶端Socket s= new Socket("192.168.7.141",8888);//啟動線程,不斷的讀取來自服務器的數據new ClientThread(s).start();//獲取socket對應的輸出流PrintStream ps=new PrintStream(s.getOutputStream());String line=null;//不斷的讀取鍵盤輸入BufferedReader br=new BufferedReader(new InputStreamReader(System.in));while((line=br.readLine())!=null) {//將用戶的鍵盤輸入類容寫入socket對應的輸出流ps.println(line);}} } tatic void main(String[] args) throws UnknownHostException, IOException {//創建客戶端Socket s= new Socket("192.168.7.141",8888);//啟動線程,不斷的讀取來自服務器的數據new ClientThread(s).start();//獲取socket對應的輸出流PrintStream ps=new PrintStream(s.getOutputStream());String line=null;//不斷的讀取鍵盤輸入BufferedReader br=new BufferedReader(new InputStreamReader(System.in));while((line=br.readLine())!=null) {//將用戶的鍵盤輸入類容寫入socket對應的輸出流ps.println(line);}} }
  • 這是客戶端,可以通過建立Socket對象來連接到服務器,因為每一個客戶端都需要接收來自服務器發送的消息,所以這里要再創建一個客戶端的線程用來無限的接收來自服務器的消息
package cs聊天室;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket;/*** 客戶端線程* @author 黃小寶**/ public class ClientThread extends Thread {//該線程負責處理的socketprivate Socket s;public ClientThread(Socket s) {this.s = s;}@Overridepublic void run() {String content = null;//不斷的讀取socket輸入流中的內容,并將這些內容打印出來try {BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));while((content=br.readLine())!=null) {System.out.println(content);}} catch (IOException e) {e.printStackTrace();}}}
  • 到這里所有的代碼已經寫完了,接下來就是測試的環節:首先需要開啟服務器,注意,必須先要開啟服務器,然后客戶端才可以連接:
    打開服務器之后 :
服務器已創建,等待連接.......

打開客戶端之后:

服務器已創建,等待連接....... DESKTOP-HPFJ5AE連接成功 歡迎使用!!!

然后就可以使用多個客戶端連接到服務器,在控制臺輸入消息,每個客戶端都能看到各自發的消息了!

總結

以上是生活随笔為你收集整理的基于UDP/IP协议的聊天室的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。