亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

基于Java網絡編程和多線程的多對多聊天系統

瀏覽:68日期:2022-08-14 11:10:13
1.前言

程序實現基于星型結構(服務器接收來自各個客戶端發送的信息,然后將信息傳遞給其他客戶端界面并在其他客戶端界面顯示發送的信息)

基于Java網絡編程和多線程的多對多聊天系統

2.類圖

基于Java網絡編程和多線程的多對多聊天系統

3.代碼

客戶端代碼:

package netProgram;import java.io.IOException;import java.net.Socket;import java.net.SocketAddress;public class Client implements ScreenInputInterface{ private SocketHandler socketHandler; public void start(){new Thread(new ScreenInputRunIns(this)).start();try { socketHandler = new SocketHandler(new Socket('127.0.0.1',666),null); new Thread(socketHandler).start();} catch (IOException e) { e.printStackTrace();} } @Override public void send(String msg) {socketHandler.sendMsg(msg); } /* @Override public void send(String msg, SocketAddress address) {socketHandler.sendMsg(msg); }*/}

服務端代碼:

package netProgram;import java.io.IOException;import java.net.ServerSocket;import java.net.SocketAddress;import java.util.ArrayList;import java.util.List;public class Server implements ScreenInputInterface{ private List<SocketHandler> clients = new ArrayList<>(); private ServerSocket serverSocket; public void start(){//new Thread(new ScreenInputRunIns(this)).start();try { serverSocket = new ServerSocket(666); while (true){SocketHandler socketHandler = new SocketHandler(serverSocket.accept(),this);clients.add(socketHandler);System.out.println(socketHandler.getSocket().getRemoteSocketAddress()+'進入聊天系統');new Thread(socketHandler).start(); }} catch (IOException e) { e.printStackTrace();} } @Override public void send(String msg) {for (SocketHandler s:clients) { s.sendMsg(msg);} } /* @Override public void send(String msg, SocketAddress address) {for (SocketHandler s:clients) { if (s.getSocket().getRemoteSocketAddress().equals(address)){continue; } s.sendMsg(msg);} }*/ public static void main(String[] args) {new Server().start(); }}

屏幕輸入信息接口:

package netProgram;import java.net.SocketAddress;public interface ScreenInputInterface { void send(String msg);// void send(String msg, SocketAddress address);}

用于各個端口輸入信息的創建的線程對象:

package netProgram;import java.util.Scanner;public class ScreenInputRunIns implements Runnable{ private ScreenInputInterface screenInputInterface; private Scanner input = new Scanner(System.in); public ScreenInputRunIns(ScreenInputInterface screenInputInterface) {this.screenInputInterface = screenInputInterface; } @Override public void run() {//屏幕實時輸入while (true){ String msg = input.nextLine();// screenInputInterface.send(msg,null); screenInputInterface.send(msg);} }}

套接字處理器(用于傳輸數據:實際發送信息到輸出流并實時監聽各個端口的輸入且負責顯示):

package netProgram;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class SocketHandler implements Runnable{ private String clientName; private Socket socket; private PrintWriter writer; private Server server; public SocketHandler(Socket socket,Server server) throws IOException {this.socket = socket;this.server = server;clientName = '<'+socket.getLocalSocketAddress()+'>';writer = new PrintWriter(this.socket.getOutputStream()); } public Socket getSocket() {return socket; } public void sendMsg(String msg){if (server!=null) writer.println(msg);else writer.println(clientName+':'+msg);writer.flush(); } @Override public void run() {while(true){//監聽輸入流的輸入 try {BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));String receiveMsg = null;System.out.println();if ((receiveMsg = reader.readLine())!=null&&!(receiveMsg.equals(''))){ if (server!=null){//server.send(receiveMsg,socket.getRemoteSocketAddress());server.send(receiveMsg); }else {System.out.println(receiveMsg); }} } catch (IOException e) {e.printStackTrace(); }} }}

負責啟動的各個端口的客戶端代碼:

package netProgram;public class ClientLinked { public static void main(String[] args) {new Client().start(); }}

package netProgram;public class ClientLinked1 { public static void main(String[] args) {new Client().start(); }}

package netProgram;public class ClientLinked2 { public static void main(String[] args) {new Client().start(); }}

服務端啟動代碼在服務端類的main方法中。

到此這篇關于基于Java網絡編程和多線程的多對多聊天系統的文章就介紹到這了,更多相關java實現多對多聊天系統內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 亚洲成人免费网站 | 亚洲国内精品久久 | 国内真实愉拍系列情侣自拍 | 1024在线视频精品免费播放 | 国产毛片视频 | 日本无翼乌邪恶大全彩h邪恶师 | 尤物国产在线精品福利一区 | 久久精品国产99久久无毒不卡 | 国产精品第2页 | 一个看片免费视频www | 无码精品日韩中文字幕 | 欧美小younv 欧美性xxxxx极品老少 | 日本一级二级三级久久 | 欧美黄色a级片 | 欧美二区在线观看 | 国产欧美一区二区三区视频在线观看 | 中文字幕精品一区二区日本大胸 | 黄色a三级免费看 | 国产欧美日韩精品一区二 | 免费看av的网址 | 国产性夜夜性夜夜爽91 | 可以看毛片的网址 | 国产成人深夜福利在线观看 | 国产一级精品高清一级毛片 | 日本黄色免费网站 | a级情欲视频免费观看 | 青青青国产在线观看免费 | 91精品麻豆 | 国产精品不卡在线观看 | 亚洲国产成人99精品激情在线 | 国产精品久久久久久久福利院 | 青青热久免费精品视频精品 | 最刺激黄a大片免费观看 | 精彩视频一区二区三区 | 害羞的清纯女神露脸在线视频 | 91仓本c仔约高挑嫩模在线 | 一级大黄美女免费播放 | 亚洲视频国产视频 | 91精品免费不卡在线观看 | 中国黄色三级 | 国产精品黄页网站在线播放免费 |