多向通信----多人聊天

news2025/1/23 2:06:06

package 多人聊天;
 
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Gserver implements Runnable {
    private int Port = 9999;
    private ServerSocket SS;
    private Socket socket;
    private ArrayList clients = new ArrayList();  //保存客户端线程
    public Gserver(){
        try{            
            SS = new ServerSocket(Port);
            new Thread(this).start();
        }catch(Exception ex){        
        }        
    }
    public void run(){
        try{
            while(true){
                socket = SS.accept();
                ChatThread ct = new ChatThread(socket);
                clients.add(ct);
                ct.start();
            }            
        }catch(Exception ex){    
        }
    }
    class ChatThread extends Thread{
        private Socket s;
        private InputStream is;
        private OutputStream os;
        private BufferedReader br;
        private PrintStream ps;
        public ChatThread(Socket socket) throws Exception{
            this.s = socket;
            is = this.s.getInputStream();
            os = this.s.getOutputStream(); 
            br = new BufferedReader(new InputStreamReader(is));
            ps = new PrintStream(os);
        }
        public void run(){
            try{
                while(true){
                    String str = br.readLine();    
                    sendMessage(str);
                }
            }catch (Exception ex){
            }
        }
        public void sendMessage(String str){
            for(int i=0; i<clients.size(); i++){
                ChatThread ct = (ChatThread)clients.get(i);
                ct.ps.println(str);
            }
        }
    }
    public static void main(String[] args){
        new Gserver();
    }
}

客户端

package 多人聊天;
 
 
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Gclient extends JFrame implements ActionListener, Runnable {
    private Socket socket;
    private int Port = 9999;
    private InetAddress ip;
    private String name;
    
    private JTextArea area = new JTextArea("以下是聊天内容:\n");
    private JTextField field = new JTextField("");
    
    public Gclient(){
        this.setTitle("客户端");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.add(field,BorderLayout.NORTH);
        field.addActionListener(this);
        this.add(area, BorderLayout.CENTER);        
        this.setSize(240, 260);
        this.setVisible(true);
        name = JOptionPane.showInputDialog("输入昵称:");
        try{
            ip = InetAddress.getByName("Localhost");
            socket = new Socket(ip,Port);
            JOptionPane.showMessageDialog(this, "连接成功");
            this.setTitle("客户端:" + name);
            new Thread(this).start();
        }catch (Exception ex){            
        }
    }
    public void run(){
        try{
            while(true){
                InputStream is = socket.getInputStream();
                BufferedReader bf = new BufferedReader(new InputStreamReader(is));
                String str = bf.readLine();
                area.append(str + '\n');
            }
        }catch (Exception ex){    
        }
    }
    public void actionPerformed(ActionEvent e){
        try{
            OutputStream os = socket.getOutputStream();
            PrintStream ps = new PrintStream(os);
            ps.println(name + "说:" + field.getText());
            field.setText("");
        }catch (Exception ex){            
        }
    }
    public static void main(String[] args) {
        new Gclient();
    }
}

就是随便输出昵称

数字的:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1289962.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Xcode15 Library ‘iconv.2.4.0‘ not found

Xcode 15运行老代码报错&#xff1a;Library iconv.2.4.0 not found 解决&#xff1a; TARGETS-->Bulid Phases --> Link Binary With Libraries 添加一个“Libiconv.tbd”, 同时把原来的 “libiconv.2.4.0.tbd”删除&#xff08;一定要删除&#xff0c;不然运行还是…

微服务开发:断路器详解

微服务是目前业界使用的最重要的实现方面。通过使用微服务架构&#xff0c;开发人员可以消除他们以前在单体应用程序中遇到的许多问题。展望未来&#xff0c;人们开始在微服务中搜索和采用各种模式。大多数时候&#xff0c;新模式的产生是为了解决另一个模式中出现的常见问题。…

ahk系列-windows超级运行框-表达式计算(11)—avg /sum 平均求和

1、环境准备 windows 7&#xff0c;8&#xff0c;10&#xff0c;11操作系统ahk 2.x_64位 2、使用方式 avg /sum 计算平均值&#xff0c;计算总和 支持数字中可以简写 k(千) &#xff0c; w(万) &#xff0c;y(亿) 可以计算运行框中的数据&#xff0c;也可以计算剪切板中的数…

【Linux】进程控制-进程终止

目录 一、进程终止&#xff0c;OS做了什么&#xff1f; 二、进程终止的常见方式 1、代码跑完&#xff0c;结果正确 2、代码跑完&#xff0c;结果不正确 补充 (1)、main函数的返回值的意义是什么&#xff1f; (2)、return 0的含义是什么&#xff1f; (3)、退出码是什么和…

ps-把文字刻进石头上

使用到的工具 准备图片&#xff1a;一张石头的图片&#xff0c;一张有喜欢字体的空白图片 得到一个纹理的psd文件&#xff1a;只把文字的图片显示&#xff0c;CTRLshifts保存成psd文件 “滤镜”——“滤镜库”——“纹理化”——&#xff08;选中文字图片的psd文件&#xff09…

代码随想录算法训练营第三十六天|01背包问题 二维 ,01背包问题 一维 ,416. 分割等和子集

背包理论基础 01 背包&#xff08;二维&#xff09; 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 背包最大重量为4。 物品为&#x…

Segment Anything--SAM自动标注(一)

文章目录 开场白基本组件搞事情从来不是一帆风顺复旦方案分支回归主线 开场白 老样子先说一下为什么我会看到这篇文章。答案是“自动标注”。 这个事情是这样&#xff0c;自动驾驶不光需要做目标检测任务也需要语义分割的信息给到后处理。当然现在做自动驾驶都在往BEV方案上靠…

IntelliJ IDEA 之初体验

文章目录 第一步&#xff1a;下载与安装 IntelliJ IDEA1&#xff09;官网下载2&#xff09;选择那种安装包3&#xff09;开始下载4&#xff09;解压 第二步&#xff1a;启动 IntelliJ IDEA第三步&#xff1a;创建第一个 Java 项目第四步&#xff1a;运行第一个 Java 程序1&…

【408】计算机学科专业基础 - 计算机组成原理

一、计算机系统概述 【复习提示】 本章是组成原理的概述&#xff0c;考查时易针对有关概念或性能指标出选择题&#xff0c;也可能综合后续章节的内容出有关性能分析的综合题。掌握本章的基本概念&#xff0c;是学好后续章节的基础。部分知识点在初学时理解不深刻也无须担忧&am…

智能优化算法应用:基于变色龙算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于变色龙算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于变色龙算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.变色龙算法4.实验参数设定5.算法结果6.参考文献7.…

十五、FreeRTOS之FreeRTOS信号量

本节需要掌握以下内容&#xff1a; 1&#xff0c;信号量的简介&#xff08;了解&#xff09; 2&#xff0c;二值信号量&#xff08;熟悉&#xff09; 3&#xff0c;二值信号量实验&#xff08;掌握&#xff09; 4&#xff0c;计数型信号量&#xff08;熟悉&#xff09; 5&…

Linux--程序地址空间

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 [TOC](文章目录) 一、程序地址空间回顾 我们在讲C语言的时候&#xff0c;老师给大家画过这样的空间布局…

Transformer在视觉的应用

文章目录 Vison TransformerSwin TransformerVisual Attention Network Vison Transformer transformer 在 cv 中最重要的算法 Linear Projection of Flattened Patches 对于标准的Transformer模块&#xff0c;要求输入的是token&#xff08;向量&#xff09;序列&#xff…

鸿蒙4.0开发笔记之ArkTS语法基础之应用生命周期与页面中组件的生命周期(十六)

文章目录 一、应用生命周期二、生命周期函数定义三、生命周期五函数练习 一、应用生命周期 1、定义 应用生命周期就是代表了一个HarmonyOS应用中所有页面从创建、开启到销毁等过程的全生命周期。查看路径如下&#xff1a; Project/entry/src/main/ets/entryability/EntryAbili…

vue elementUI 上传非空验证

<el-form-item label"照片" prop"staffImg"><template v-slot:label><span v-show"!rules.staffImg[0].required"style"color: #ff4949;margin-right: 4px;">*</span><span>照片</span></temp…

【JavaWeb学习笔记】6 - Tomcat

项目代码 零、在线文档 Apache Tomcat 8 (8.0.53) - Documentation Index WEB开发 1. WEB,在英语中web表示网/网络资源(页面&#xff0c;图片,css,js)意思&#xff0c;它用于表示WEB服务器(主机)供浏览器访问的资源 2. WEB服务器(主机)上供外界访问的Web资源分为: 静态web…

LeetCode 每日一题 Day 4

2477. 到达首都的最少油耗 给你一棵 n 个节点的树&#xff08;一个无向、连通、无环图&#xff09;&#xff0c;每个节点表示一个城市&#xff0c;编号从 0 到 n - 1 &#xff0c;且恰好有 n - 1 条路。0 是首都。给你一个二维整数数组 roads &#xff0c;其中 roads[i] [ai,…

Myblog01-基于基本的javaWeb设计实现

目录 一、项目概述&#xff1a; 应用技术&#xff1a; 接口实现&#xff1a; 数据库建表&#xff0c;sql脚本&#xff1a; 页面展示&#xff1a;登陆页面 项目源码&#xff1a;myblog01: 初版的个人博客项目-使用基本的javaWeb (gitee.com) 二、对博客系统进行测试 总结 一、项…

怎么给文章润色?文章润色怎么收费?

文章润色&#xff0c;指的是在原有文章基础上&#xff0c;对语言表达、逻辑结构、风格等方面进行优化调整&#xff0c;以提高文章的阅读体验和质量。 润色不同于修改&#xff0c;修改主要针对文章中的错误&#xff0c;如语法、拼写、标点等&#xff1b;而润色则是对文章的整体…