av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

基于Java網(wǎng)絡(luò)編程和多線程的多對(duì)多聊天系統(tǒng)

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

程序?qū)崿F(xiàn)基于星型結(jié)構(gòu)(服務(wù)器接收來(lái)自各個(gè)客戶端發(fā)送的信息,然后將信息傳遞給其他客戶端界面并在其他客戶端界面顯示發(fā)送的信息)

基于Java網(wǎng)絡(luò)編程和多線程的多對(duì)多聊天系統(tǒng)

2.類圖

基于Java網(wǎng)絡(luò)編程和多線程的多對(duì)多聊天系統(tǒng)

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); }*/}

服務(wù)端代碼:

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()+'進(jìn)入聊天系統(tǒng)');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);}

用于各個(gè)端口輸入信息的創(chuàng)建的線程對(duì)象:

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() {//屏幕實(shí)時(shí)輸入while (true){ String msg = input.nextLine();// screenInputInterface.send(msg,null); screenInputInterface.send(msg);} }}

套接字處理器(用于傳輸數(shù)據(jù):實(shí)際發(fā)送信息到輸出流并實(shí)時(shí)監(jiān)聽(tīng)各個(gè)端口的輸入且負(fù)責(zé)顯示):

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){//監(jiān)聽(tīng)輸入流的輸入 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(); }} }}

負(fù)責(zé)啟動(dòng)的各個(gè)端口的客戶端代碼:

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

服務(wù)端啟動(dòng)代碼在服務(wù)端類的main方法中。

到此這篇關(guān)于基于Java網(wǎng)絡(luò)編程和多線程的多對(duì)多聊天系統(tǒng)的文章就介紹到這了,更多相關(guān)java實(shí)現(xiàn)多對(duì)多聊天系統(tǒng)內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 97在线观看视频 | 一级黄色免费看 | 国产成人精品一区二区三区在线 | 日韩精品在线观看视频 | 日韩一区二区免费视频 | 香蕉视频在线观看网站 | 欧美日韩大片 | 日韩免费视频 | 国产又粗又猛又黄又爽无遮挡 | 亚洲第一黄网 | 国产普通话对白 | 青草国产 | 91成人免费版 | 欧美精品久久久久久久 | 亚洲综合在线视频 | 91久久久久国产一区二区 | 黄色a一级片 | 国产福利视频在线 | 日韩激情网站 | 国产精品入口66mio男同 | 久久精品欧美一区二区 | 日本久久久久久久久 | 亚洲黄色小视频 | 欧美www.| 国产www视频 | 日韩在线欧美 | 黄色大片在线播放 | 亚洲网站在线观看 | 亚洲在线一区 | 国产在线不卡视频 | a毛片大片 | 特级丰满少妇一级aaaa爱毛片 | 欧美性色网 | 青青草免费在线观看视频 | 亚洲综合一区二区三区 | 久久国产一区二区三区 | 国产精品国产三级国产专区53 | 国产精品视屏 | 成人性色生活片 | 91调教视频 | 伊人网av|