一对一聊天

2023-12-19

服务端

package 一对一用户;
 
 
 
 
import java.awt.BorderLayout;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
 
public class fuwuchuangkou extends JFrame {
    private JTextArea ta_info;
    private ServerSocket server; // 声明ServerSocket对象
    private Socket socket; // 声明Socket对象socket
    private Vector<Socket> vector = new Vector<Socket>();// 用于存储连接到服务器的客户端套接字对象
    
    public void createSocket() {
        try {
            server = new ServerSocket(1978);
            while (true) {
                ta_info.append("等待新客户连接......\n");
                socket = server.accept();// 创建套接字对象
                vector.add(socket);// 将套接字对象添加到向量对象中
                ta_info.append("客户端连接成功。" + socket + "\n");
                new ServerThread(socket).start();// 创建并启动线程对象
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    class ServerThread extends Thread {
        Socket socket;
        public ServerThread(Socket socket) {
            this.socket = socket;
        }
        public void run() {
            try {
                BufferedReader in = new BufferedReader(new InputStreamReader(
                        socket.getInputStream()));// 创建输入流对象
                while (true) {
                    String info = in.readLine();// 读取信息
                    for (Socket s : vector) {// 遍历所有客户端套接字对象
                        if (s != socket) {// 如果不是发送信息的套接字对象
                            PrintWriter out = new PrintWriter(s
                                    .getOutputStream(), true);// 创建输出流对象
                            out.println(info);// 发送信息
                            out.flush();// 刷新输出缓冲区
                        }
                    }
                }
            } catch (IOException e) {
                ta_info.append(socket + "已经退出。\n");
                vector.remove(socket);// 移除退出的客户端套接字
            }
        }
    }
    
 
    public static void main(String args[]) {
        fuwuchuangkou frame = new fuwuchuangkou();
        frame.setVisible(true);
        frame.createSocket();
    }
    
    /**
     * Create the frame
     */
    public fuwuchuangkou() {
        super();
        setTitle("一对一");
        setBounds(100, 100, 385, 266);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        final JScrollPane scrollPane = new JScrollPane();
        getContentPane().add(scrollPane, BorderLayout.CENTER);
        
        ta_info = new JTextArea();
        scrollPane.setViewportView(ta_info);
    }
}

客服端

package 一对一用户;
 
 
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
 
public class kehuchuangkou extends JFrame {
    private JTextArea ta_info;
    private JTextField tf_send;
    PrintWriter out;// 声明输出流对象
    
    /**
     * Launch the application
     * 
     * @param args
     */
    public static void main(String args[]) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                   kehuchuangkou frame = new kehuchuangkou();
                    frame.setVisible(true);
                    frame.createClientSocket();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    
    public void createClientSocket() {
        try {
            Socket socket = new Socket("127.0.0.1", 1978);// 连接本地1978端口
            out = new PrintWriter(socket.getOutputStream(), true);// 创建输出流对象
            new ClientThread(socket).start();// 创建并启动线程对象
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    class ClientThread extends Thread {
        Socket socket;
        
        public ClientThread(Socket socket) {
            this.socket = socket;
        }
        
        public void run() {
            try {
                BufferedReader in = new BufferedReader(new InputStreamReader(
                        socket.getInputStream()));// 创建输入流对象
                while (true) {
                    String info = in.readLine();// 读取信息
                    ta_info.append(info + "\n");// 在文本域中显示信息
                    if (info.equals("88")) {
                        break;// 结束线程
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    private void send() {
        String info = tf_send.getText();// 获得输入的信息
        if (info.equals("")) {
            return;// 如果没输入信息则返回,即不发送
        }
        if (info.equals("88")) {
            System.exit(0);// 如果没输入信息是88,则退出
        }
        out.println(info);// 发送信息
        out.flush();// 刷新输出缓冲区
        tf_send.setText(null);// 清空文本框
    }
    
   
    public kehuchuangkou() {  //创建面板
        super();
        setTitle("一对一");
        setBounds(100, 100, 385, 266);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        final JPanel panel = new JPanel();
        getContentPane().add(panel, BorderLayout.SOUTH);
        
        final JLabel label = new JLabel();
        label.setText("输入聊天内容:");
        panel.add(label);
        
        tf_send = new JTextField();
        tf_send.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent e) {
                send();
            }
        });
        tf_send.setPreferredSize(new Dimension(180, 25));
        panel.add(tf_send);
        
        final JButton button = new JButton();
        button.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent e) {
                send();
            }
        });
        button.setText("发  送");
        panel.add(button);
        
        final JScrollPane scrollPane = new JScrollPane();
        getContentPane().add(scrollPane, BorderLayout.CENTER);
        
        ta_info = new JTextArea();
        scrollPane.setViewportView(ta_info);
        
    }
    
}
 
package 一对一用户;
 
 
 
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
 
public class kehu1 extends JFrame {
    private JTextArea ta_info;
    private JTextField tf_send;
    PrintWriter out;// 声明输出流对象
    
    /**
     * Launch the application
     * 
     * @param args
     */
    public static void main(String args[]) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                   kehuchuangkou frame = new kehuchuangkou();
                    frame.setVisible(true);
                    frame.createClientSocket();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    
    public void createClientSocket() {
        try {
            Socket socket = new Socket("127.0.0.1", 1978);// 连接本地1978端口
            out = new PrintWriter(socket.getOutputStream(), true);// 创建输出流对象
            new ClientThread(socket).start();// 创建并启动线程对象
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    class ClientThread extends Thread {
        Socket socket;
        
        public ClientThread(Socket socket) {
            this.socket = socket;
        }
        
        public void run() {
            try {
                BufferedReader in = new BufferedReader(new InputStreamReader(
                        socket.getInputStream()));// 创建输入流对象
                while (true) {
                    String info = in.readLine();// 读取信息
                    ta_info.append(info + "\n");// 在文本域中显示信息
                    if (info.equals("88")) {
                        break;// 结束线程
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    private void send() {
        String info = tf_send.getText();// 获得输入的信息
        if (info.equals("")) {
            return;// 如果没输入信息则返回,即不发送
        }
        if (info.equals("88")) {
            System.exit(0);// 如果没输入信息是88,则退出
        }
        out.println(info);// 发送信息
        out.flush();// 刷新输出缓冲区
        tf_send.setText(null);// 清空文本框
    }
    
   
    public kehu1() {  //创建面板
        super();
        setTitle("一对一");
        setBounds(100, 100, 385, 266);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        final JPanel panel = new JPanel();
        getContentPane().add(panel, BorderLayout.SOUTH);
        
        final JLabel label = new JLabel();
        label.setText("输入聊天内容:");
        panel.add(label);
        
        tf_send = new JTextField();
        tf_send.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent e) {
                send();
            }
        });
        tf_send.setPreferredSize(new Dimension(180, 25));
        panel.add(tf_send);
        
        final JButton button = new JButton();
        button.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent e) {
                send();
            }
        });
        button.setText("发  送");
        panel.add(button);
        
        final JScrollPane scrollPane = new JScrollPane();
        getContentPane().add(scrollPane, BorderLayout.CENTER);
        
        ta_info = new JTextArea();
        scrollPane.setViewportView(ta_info);
        
    }
    
}
 

运行结果如下:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一对一聊天 的相关文章

随机推荐

  • 基于SpringBoot+Vue的社区养老服务系统演示设计实现(源码+lw+部署文档+讲解等)

    文章目录 前言 详细视频演示 具体实现截图 技术栈 后端框架SpringBoot 前端框架Vue 持久层框架MyBaitsPlus 系统测试 系统测试目的
  • 基于SpringBoot+Vue的小区团购管理设计实现(源码+lw+部署文档+讲解等)

    文章目录 前言 详细视频演示 具体实现截图 技术栈 后端框架SpringBoot 前端框架Vue 持久层框架MyBaitsPlus 系统测试 系统测试目的
  • JavaWeb——第五章 Servlet

    第五章 Servlet 一 Servlet简介 1 1 动态资源和静态资源 1 2 Servlet简介 二 Servlet开发流程 2 1 目标 2 2 开发过程 三 Servlet注解方式配置
  • 使用Axure的中继器的交互&动作解决增删改查h

    艳艳耶 个人主页 个人专栏 越努力 越幸运 目录 一 中继器的交互 1 什么是中继器的交互 2 Axure中继器的交互 3 如何使用中继器 二 中继器的动作 1 什么是Axure中继器的动作 三 中继器的repeater属性 1 什么是Ax
  • 采购审批工作流程快速指南

    对很多人来说 控制每一分钱的支出是一件棘手的事情 但在当下充满不确定性的环境里 这一点与收入增长同等重要 正如俗话说 要想赚钱 先学会花钱 本文将分析支出控制的基石之一 采购审批工作流程 有了审批工作流程 企业就可以跟踪每一笔支出 并开始削
  • 基于Apache SeaTunnel构建CDC数据同步管道

    引言 在快速发展的数据驱动时代 数据的实时 准确同步成为了企业信息系统不可或缺的一部分 随着技术的进步 特别是在分布式计算和大数据技术的背景下 构建一个高效且可靠的数据同步管道成为了挑战 Apache SeaTunnel作为一个先进的数据集
  • k8s集群1.23.0版本部署说明

    1 部署 k8s1 23 0版本与1 26 0版本的部署基本差不多 只不过k8s 1 23版本不需要部署cri docker 所以只需要在1 26 0版本部署的基础上不要cri docker的部署即可 参考 kubeadm部署k8s 1 2
  • ETC纹理压缩

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • Mimikatz ERROR kuhl_m_sekurlsa_acquireLSA ; Key import

    原文链接 ERROR kuhl m sekurlsa acquireLSA Key import CSDN博客 报错原因 1 确定不是权限的问题 已是最高权限 2 确定不是UAC绕过的问题 已是HIGH GROUPS 3 环境为Win10系
  • 基于Spring Boot、Mybatis、Redis和Layui的企业电子招投标系统源码实现与立项流程

    招投标管理系统是一款适用于招标代理 政府采购 企业采购和工程交易等领域的企业级应用平台 该平台以项目为主线 从项目立项到项目归档 实现了全流程的高效沟通和协作 通过该平台 用户可以实时共享项目数据信息 实现规范化管理和有效监控 协同工作网络
  • 防止被坑!明理信息科技知识服务平台教你如何明智选择知识付费平台

    明理信息科技知识服务平台 随着知识经济的兴起 知识付费已经成为一种趋势 越来越多的人开始将自己的知识和技能进行变现 而知识付费小程序平台则成为了一个重要的渠道 然而 市面上的知识付费小程序平台琳琅满目 其中不乏一些不良平台 让老实人望而却步
  • 第二十一章网络通信总结博客

    网络程序设计基础 局域网与互联网 为了实现两台 计算机 的通信 必须用一个网络线路连接两台计算机 如下图所示 网络协议 1 IP协议 IP是Internet Protocol的简称 是一种网络协议 Internet 网络采用的协议是TCP
  • Vue3+Echarts:堆积柱状图的绘制

    一 需求 在Vue3项目中 想用Echarts来绘制堆积柱状图 去展示最近一周APP在不同渠道的登录人数 效果如下 二 实现 关于Echarts的下载安装以及图表的样式设计 此处不展开 1 Templates部分
  • 大语言模型(LLM)与 Jupyter 连接起来了!

    现在 大语言模型 LLM 与 Jupyter 连接起来了 这主要归功于一个名叫 Jupyter AI 的项目 它是官方支持的 Project Jupyter 子项目 目前该项目已经完全开源 其连接的模型主要来自 AI21 Anthropic
  • TimeGPT:时序预测领域终于迎来了第一个大模型

    时间序列预测领域在最近的几年有着快速的发展 比如N BEATS N HiTS PatchTST和TimesNet 大型语言模型 llm 最近在ChatGPT等应用程序中变得非常流行 因为它们可以适应各种各样的任务 而无需进一步的训练 这就引
  • SCADA助力食品加工数字化变革:未来产业的智慧引擎

    一 背景介绍 当前 在国际市场竞争加剧 消费者个性化需求突出的背景下 我国食品加工行业面临着诸多挑战 越发严苛的食品安全标准 追求供应链的透明度和效率 进一步提高产品质量和降低成本 等等 为了应对上述挑战 我国食品加工企业迫切需要利用先进的
  • 3d抄数逆向建模服务造纸机械叶轮三维扫描曲面建模-CASAIM

    在造纸机械中 叶轮是重要的组成部分 造纸机械叶轮在使用过程中会承受较大外力的摩擦 长期使用容易导致外观变形破损 从而降低叶轮的工作效率和精度 因此 定期生产制作同类型的造纸机械叶轮产品 以用于替换年久失修的旧产品 已成为越来越多造纸类企业的
  • 【网络安全】-Linux操作系统—操作系统发展历史与Linux

    操作系统发展历史 操作系统 Operating System 简称OS 是管理计算机硬件与软件资源的系统软件 它是计算机系统的核心与基石 操作系统的发展历史可以追溯到20世纪50年代 初期的操作系统 在计算机技术的早期 操作系统并不存在 那
  • mycat读写分离部署

    一 前言 mycat跟proxysql一样都是实现mysql主从架构的读写分离 提高mysql性能 也是具备主从读写的故障切换和读写分离功能 不过跟proxysql有区别的是 mycat用的是虚拟库映射后端真实数据库的用法 二 部署 部署m
  • 一对一聊天

    服务端 package 一对一用户 import java awt BorderLayout import java io BufferedReader import java io IOException import java io I