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

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.mzph.cn/news/204273.shtml

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

相关文章

K8s中安装calico一直无法启动成功

问题描述 #k8s版本为v1.20.9查看对应日志 #calico-node-xxx 对应pod名称 kubectl logs calico-node-xxxx -n kube-system #没有错误但是一直启动不起来应该是版本不匹配问题解决方案 删除 calico重新安装对应版本删除podskubectl delete -f calico.yaml删除文件 rm -f calico.…

【NLP】如何管理大型语言模型 (LLM)

什么是LLM编排&#xff1f; LLM 编排是管理和控制大型语言模型 (LLM)的过程&#xff0c;以优化其性能和有效性。这包括以下任务&#xff1a; 提示LLM&#xff1a;生成有效的提示&#xff0c;为LLMs提供适当的背景和信息以产生所需的输出。链接LLM&#xff1a; 结合多个LLM的输…

SpringBoot读取properties文字乱码问题及相关问题

问题&#xff1a;在idea的编辑器中properties文件一般用UTF-8编码&#xff0c;SpringBoot2读取解码方式默认不是UTF-8&#xff0c;当值出现中文时SpringBoot读取时出现了乱码。 解决方式1&#xff1a;在SpringBoot框架层面解决&#xff0c;在配置类注解上添加encoding属性值为…

5G - NR物理层解决方案支持6G非地面网络中的高移动性

文章目录 非地面网络场景链路仿真参数实验仿真结果 非地面网络场景 链路仿真参数 实验仿真结果 Figure 5 && Figure 6&#xff1a;不同信噪比下的BER和吞吐量 变量 SISO 2x2MIMO 2x4MIMO 2x8MIMOReyleigh衰落、Rician衰落、多径TDL-A(NLOS) 、TDL-E(LOS)(a)QPSK (b)16…

[足式机器人]Part4 南科大高等机器人控制课 Ch02 Rigid Body Configuration and Velocity

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;CLEAR_LAB 笔者带更新-运动学 课程主讲教师&#xff1a; Prof. Wei Zhang 南科大高等机器人控制课 Ch02 Rigid Body Configuration and Velocity 1. Rigid Body Configuration1.1 Special Orthogonal Group1.2 Use of Ro…

Centos7安装宝塔面板8.0.3并实现公网远程登录宝塔面板【内网穿透】

文章目录 一、使用官网一键安装命令安装宝塔二、简单配置宝塔&#xff0c;内网穿透三、使用固定公网地址访问宝塔 宝塔面板作为建站运维工具&#xff0c;适合新手&#xff0c;简单好用。当我们在家里/公司搭建了宝塔&#xff0c;没有公网IP&#xff0c;但是想要在外也可以访问内…

组合总和II(回溯、去重)

40. 组合总和 II - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a…

相交链表(LeetCode 160)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路方法一&#xff1a;暴力法方法二&#xff1a;哈希表方法三&#xff1a;双栈方法四&#xff1a;双指针&#xff1a;记录链表长度方法五&#xff1a;双指针&#xff1a;互换遍历 5.实现示例参考文献 1.问题描述 给两个单链表的…

Java第二十一章网络通信

一、网络程序设计基础 1、局域网与互联网 为了实现两台计算机的通信&#xff0c;必须用一个网络线路连接两台计算机&#xff0c;如下图所示。 2、网络协议 1.IP协议 IP指网际互连协议&#xff0c;Internet Protocol的缩写&#xff0c;是TCP/IP体系中的网络层协议。设计IP的目的…

深入理解数据在内存中是如何存储的,位移操作符如何使用(能看懂文字就能明白系列)文章超长,慢慢品尝

系列文章目录 C语言笔记专栏 能看懂文字就能明白系列 &#x1f31f; 个人主页&#xff1a;古德猫宁- &#x1f308; 信念如阳光&#xff0c;照亮前行的每一步 文章目录 系列文章目录&#x1f308; *信念如阳光&#xff0c;照亮前行的每一步* 前言引子一、2进制和进制转化为什么…

Verilog开源项目——百兆以太网交换机(四)令牌桶管理单元设计

Verilog开源项目——百兆以太网交换机&#xff08;四&#xff09;令牌桶管理单元设计 &#x1f508;声明&#xff1a;未经作者允许&#xff0c;禁止转载 &#x1f603;博主主页&#xff1a;王_嘻嘻的CSDN主页 &#x1f511;全新原创以太网交换机项目&#xff0c;Blog内容将聚焦…

前缀和|二分查找|LeetCode2234| 花园的最大总美丽值

作者推荐 贪心算法LeetCode2071:你可以安排的最多任务数目 本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 二分查找算法合集 题目 Alice 是 n 个花园的园丁&#xff0c;她想通过种花&#xff0c;最大化她所有花…

pycharm中debug,py文件

1、先把需要的实参传入 2、在合适位置打上断点 3、在小三角旁边右键调用调试 4.步进/步出查看 5.选择单步执行&#xff0c;走的更慢

使用Python实现爬虫IP负载均衡和高可用集群

做大型爬虫项目经常遇到请求频率过高的问题&#xff0c;这里需要说的是使用爬虫IP可以提高抓取效率&#xff0c;那么我们通过什么方法才能实现爬虫IP负载均衡和高可用集群&#xff0c;并且能快速的部署并且完成爬虫项目。 通常在Python中实现爬虫ip负载均衡和高可用集群需要一…

基于ssm助学贷款网站论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本助学贷款管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

CTF 7

信息收集 存活主机探测 arp-scan -l 端口探测 nmap -sT --min-rate 10000 -p- 192.168.0.5 服务版本等信息 nmap -sT -sV -sC -O -p22,80,137,138,139,901,5900,8080,10000 192.168.0.5Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-02 21:23 CST Stats: 0:01:30 elaps…

​劲松中西医结合医院专家讲解hpv36阳性是否严重

​劲松中西医结合医院专家讲解hpv36阳性严重性问题 HPV36阳性&#xff0c;就像一场潜在的暴风雨&#xff0c;预示着可能的危机。它代表了一种高危型的HPV感染&#xff0c;就像一只隐藏在暗处的猛兽&#xff0c;随时可能暴起伤人。然而&#xff0c;就像生活中的许多挑战&#x…

Python 在控制台打印带颜色的信息

#格式&#xff1a;  设置颜色开始 &#xff1a;\033[显示方式;前景色;背景色m #说明&#xff1a; 前景色 背景色 颜色 --------------------------------------- 30 40 黑色 31 41 红色 32 …

Linux环境下ARM开发

目录 前言ARM启动及开发基础1.Cortex-A架构2.启动方式3.汇编基础4.Makefile语法基础5.Makefile补充6.编译下载 结语 前言 主要介绍基于linux开发环境下&#xff0c;如何开发ARM A7 ARM启动及开发基础 1.Cortex-A架构 1&#xff09;Cortex-A7运行模式 模式说明User(USR)用户模…

RK3588 平台的libevent库的交叉编译

1、下载libevent库&#xff0c;官网https://libevent.org/ 2、解压 3、配置 ./configure --prefix/home/harmony/Lib_self/cross --hostarm-linux-gnueabihf CCaarch64-linux-gnu-gcc --prefix指定安装目录, --host指定将要运行的特定平台 CC指定C语言的编译器 CXX指定C语言…