电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:75日期: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
相關文章:
主站蜘蛛池模板: 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 发电机价格|发电机组价格|柴油发电机价格|柴油发电机组价格网 | 免联考国际MBA_在职MBA报考条件/科目/排名-MBA信息网 | 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 七维官网-水性工业漆_轨道交通涂料_钢结构漆 | 安徽免检低氮锅炉_合肥燃油锅炉_安徽蒸汽发生器_合肥燃气锅炉-合肥扬诺锅炉有限公司 | 工业铝型材-铝合金电机壳-铝排-气动执行器-山东永恒能源集团有限公司 | 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 杰福伦_磁致伸缩位移传感器_线性位移传感器-意大利GEFRAN杰福伦-河南赉威液压科技有限公司 | 玻璃钢型材-玻璃钢风管-玻璃钢管道,生产厂家-[江苏欧升玻璃钢制造有限公司] | 全国国际化学校_国际高中招生_一站式升学择校服务-国际学校网 | 新型锤式破碎机_新型圆锥式_新型颚式破碎机_反击式打沙机_锤式制砂机_青州建源机械 | GAST/BRIWATEC/CINCINNATI/KARL-KLEIN/ZIEHL-ABEGG风机|亚喜科技 | 沧州友城管业有限公司-内外涂塑钢管-大口径螺旋钢管-涂塑螺旋管-保温钢管生产厂家 | 砖机托板价格|免烧砖托板|空心砖托板厂家_山东宏升砖机托板厂 | 北京律师事务所_房屋拆迁律师_24小时免费法律咨询_云合专业律师网 | 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 超声波焊接机_超音波熔接机_超声波塑焊机十大品牌_塑料超声波焊接设备厂家 | 软文发布-新闻发布推广平台-代写文章-网络广告营销-自助发稿公司媒介星 | 中医中药治疗血小板减少-石家庄血液病肿瘤门诊部 | 连续密炼机_双转子连续密炼机_连续式密炼机-南京永睿机械制造有限公司 | LHH药品稳定性试验箱-BPS系列恒温恒湿箱-意大利超低温冰箱-上海一恒科学仪器有限公司 | 板式换网器_柱式换网器_自动换网器-郑州海科熔体泵有限公司 | 磁力链接搜索神器_BT磁力狗_CILIMAO磁力猫_高效磁力搜索引擎2024 | 数显水浴恒温振荡器-分液漏斗萃取振荡器-常州市凯航仪器有限公司 | 十字轴_十字轴万向节_十字轴总成-南京万传机械有限公司 | 拉力机-拉力试验机-万能试验机-电子拉力机-拉伸试验机-剥离强度试验机-苏州皖仪实验仪器有限公司 | 海德莱电力(HYDELEY)-无功补偿元器件生产厂家-二十年专业从事电力电容器 | 水冷式工业冷水机组_风冷式工业冷水机_水冷螺杆冷冻机组-深圳市普威机械设备有限公司 | 贵州自考_贵州自学考试网| PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 广东燎了网络科技有限公司官网-网站建设-珠海网络推广-高端营销型外贸网站建设-珠海专业h5建站公司「了了网」 | 标准件-非标紧固件-不锈钢螺栓-非标不锈钢螺丝-非标螺母厂家-三角牙锁紧自攻-南京宝宇标准件有限公司 | 哲力实业_专注汽车涂料汽车漆研发生产_汽车漆|修补油漆品牌厂家 长沙一级消防工程公司_智能化弱电_机电安装_亮化工程专业施工承包_湖南公共安全工程有限公司 | 快速门厂家批发_PVC快速卷帘门_高速门_高速卷帘门-广州万盛门业 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 地脚螺栓_材质_标准-永年县德联地脚螺栓厂家 | 二手注塑机回收_旧注塑机回收_二手注塑机买卖 - 大鑫二手注塑机 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 无缝方管|无缝矩形管|无缝方矩管|无锡方管厂家 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 九州网址_专注于提供网址大全分享推广中文网站导航服务 | 快速卷帘门_硬质快速卷帘门-西朗门业 |