新民企业自助建站/企点官网
服务端
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对象socketprivate 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);}}
运行结果
相关文章:

一对一聊天
服务端 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;…...

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Mybatis查询中返回值四种情况
第一章 Mybatis查询中返回值四种情况 1.1 查询单行数据返回单个对象 /*** 通过id获取员工信息*/ public Employee selectEmpById(int empId);<select id"selectEmpById" resultType"employee">SELECTid,last_name,email,salaryFROMtbl_employeeWHE…...

华为云安全组规则
初始发布cce,快被安全组搞死了。现在把自己的研究成果综合一下,在这里给自己留痕,希望对迷惑的朋友有帮助。 先搞懂安全组是个啥东东: 安全组规则 操作场景 安全组实际是网络流量访问策略,通过访问策略可以控制流量入方向规则和出方向规则,通过这些规则可以为加入安全组…...

MySQL之binlog文件过多处理方法
背景 MySQL由于大量读写,导致binlog文件特别的多。从而导致服务器disk空间不足问题。 先备份binlog文件 tar -zcvf mysql.tar.gz mysql/data/mysql-bin.00* 修改MySQL配置 binlog过期时间 show variables like expire_logs_days; 这里 0 表示 永不过期 如果为 n…...

力扣面试150题 | 88.合并两个有序数组
力扣面试150题 | 88.合并两个有序数组 题目描述解题思路代码实现复杂度分析 题目描述 88.合并两个有序数组 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并…...

Spring Cache快速入门教程及案例
1. Spring Cache介绍 Spring Cache提供了一组注解,使开发者能够轻松地在方法上定义缓存行为 Spring Cache抽象了缓存的底层实现,允许开发者选择使用不同的缓存提供者(如 Ehcache、Redis、Caffeine 等)。通过配置相应的缓存管理器…...

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

虚拟化之指令的Trap和仿真
有时,虚拟机监控程序需要在虚拟机(VM)中模拟操作。例如,VM内的软件可能尝试配置与功耗管理或缓存一致性相关的低级处理器控件。通常,您不希望将VM直接访问这些控件,因为它们可能被用于突破隔离,或影响系统中的其他VM。 trap在执行给定操作(例如读取寄存器)时引发异常…...

Python函数默认参数设置
在某些情况下,程序需要在定义函数时为一个或多个形参指定默认值,这样在调用函数时就可以省略为该形参传入参数值,而是直接使用该形参的默认值。 为形参指定默认值的语法格式如下: 形参名 默认值 从上面的语法格式可以看出&…...

js moment计算当前时间到24:00:00的剩余时间
2023.12.7今天我学习了如何计算当前的时间到24:00:00剩下的时间,https://momentjs.cn/ const now moment(); // 获取当前时间const endOfDay moment().endOf(day); // 设置当天的 23:59:59const duration moment.duration(endOfDay.diff(now)); // 计算剩余时间的…...

【UE5】瞬移+马赛克过渡效果
效果 步骤 1. 新建一个工程,创建一个Basic关卡 2. 添加第三人称游戏资源到内容浏览器 3. 新建一个材质,这里命名为“M_Pixel” 打开“M_Pixel”,设置材质域为“后期处理” 在材质图表中添加如下节点 此时效果如下,已经有马赛克的…...

【Skynet 入门实战练习】分布式 ID | 雪花算法 | 缓存设计 | LRU算法 | 数据库
文章目录 前言雪花算法LRU 算法缓存模块数据库测试逻辑 前言 本节实现了 分布式 ID 生成系统,采用雪花算法实现唯一 ID;实现缓存架构,采用 LRU (最近最少使用)算法。 雪花算法 分布式 ID 生成算法的有很多种&#x…...

ArcGIS Pro中怎么设置标注换行
在ArcGIS Pro中进行文字标注的时候,如果标注的字段内容太长,直接标注的话会不美观,而且还会影响旁边的标注显示,这里为大家介绍一下在ArcGIS Pro中设置文字换行的方法,希望能对你有所帮助。 数据来源 本教程所使用的…...

MAX26——快速人物毛发插片工具 Hair cards tool
一提到毛发插件,我们一般想起的就是maya的 xgrn 或者max的ox。但是这些都是我们做影视级数字人用的。比较费性能也比较费面 下面分享一个干货 Hair cards tool 这个插件操作不像xgen与ox那么复杂。基本上0基础上手5分钟不到。就能插片出不错的效果。比较适用于&…...

一天一个设计模式---原型模式
基本概念 原型模式(Prototype Pattern)是一种创建型设计模式,其主要目的是通过复制现有对象来创建新对象,而不是通过实例化类。原型模式允许在运行时动态创建对象,同时避免了耦合与子类化。 在原型模式中࿰…...

<习题集><LeetCode><链表><2/19/21/23/24>
目录 2. 两数相加 19. 删除链表的倒数第 N 个结点 21. 合并两个有序链表 23. 合并 K 个升序链表 24. 两两交换链表中的节点 2. 两数相加 https://leetcode.cn/problems/add-two-numbers/ public ListNode addTwoNumbers(ListNode l1, ListNode l2) {//head是cur链表头节点…...

C++实现DFS、BFS、Kruskal算法和Prim算法、拓扑排序、Dijkstra算法
背景: 实现要求: 根据图的抽象数据类型的定义,请采用邻接矩阵来存储图1,采用邻接表来存储图2,并完成如下操作:对图1无向图进行深度优先遍历和广度优先遍历。对图1无向图采用Kruskal算法和Prim算法得出最小…...

Spring 依赖注入的三种方式优缺点
小王学习录 前言属性注入1. 属性注入的优点2. 属性注入的缺点 Setter注入Setter注入的优点Setter注入的缺点 构造方法注入1. 构造方法的优点 总结补充Aurowired注解和Resource注解的区别 前言 在前面的文章中介绍了基于注解的方式将Bean存储到Spring中, 接下来介绍如何基于注解…...

代理模式介绍(静态代理、jdk动态代理、cglib代理)
一、静态代理 (一)定义 1、定义 为其他对象提供一种代理以控制对这个对象的访问; 2、涉及到的角色 (1)抽象主题角色:真实主题和代理主题的共同接口,便于在使用真实主题的地方都可以使用代理…...

设计模式基础——工厂模式剖析(2/2)
目录 一、工厂模式 1.1 工厂模式的定义 1.2 工厂模式的设计意图 1.3 工厂模式主要解决的问题 1.4 工厂模式的缺点 1.5 实际的应用案例 1. 数据库连接池 2. 图形用户界面(GUI)组件 3. 文件操作 二、各种工厂模式的变形 1.1 简单工厂模式&#…...

spark3.x 读取hudi报错
报错信息如下: Exception in thread "main" org.apache.hudi.exception.HoodieUpsertException: Failed to upsert for commit time 20231201203145254 at org.apache.hudi.table.action.commit.BaseWriteHelper.write(BaseWriteHelper.java:64) at org.apa…...

微信小程序中block和View组件的使用区别
block和View组件都是用于布局的组件: 1. Block组件: Block组件是一个无实际显示效果的组件,它主要用于包裹一组组件,并提供了类似于div的作用。使用Block组件可以将一组组件进行分组,便于样式的管理和控制。Block组件不会在页面…...

代码混淆技术探究与工具选择
代码混淆技术探究与工具选择 引言 在软件开发中,保护程序代码的安全性是至关重要的一环。代码混淆(Obfuscated code)作为一种常见的保护手段,通过将代码转换成难以理解的形式来提升应用被逆向破解的难度。本文将介绍代码混淆的概…...

selenium 解决 id定位、class定位中,属性值带空格的解决办法
一、前置说明 selenium遇到下面这种元素: <th id"demo id" class"value1 value2 value3 ">1、虽然id一般不会有空格,但是前端错误的这种写法(如下图),会造成使用id定位不到元素,如: find…...

gma 空间绘图实战(1):绘制多个子图,连接并展示局部放大区域
安装 gma:pip install gma 本文基于:gma 2.0.3,Python 3.10 本文用到的矢量数据为:CTAmap 1.12。来源于 https://www.shengshixian.com/ 。(感谢锐多宝) 绘图目标 参考代码 import matplotlib.pyplot as p…...

Unity中C#使用协程控制Shader材质变化
文章目录 前言一、协程是什么二、在Unity中使用协程1、我们在 Start 中测试一下协程的执行顺序2、我们实现一个点击按钮实现角色受击效果 三、协程中的动画过渡1、首先,在协程内实现中毒并且消散的效果2、在 OnGUI 内,给一个新按钮使用刚刚定义的协程 四…...

WordPress禁止显示指定类别的文章
使用wordpress禁止输出指定类别的文章可以给get_posts()函数传个数组参数,如下: <div class"widget" id"diary1"> <h3>随机呈现</h3> <ul> <?php $argsarray( numberposts>16, category>-9,-12, …...

C#里面的泛型(T),泛型类,泛型方法,泛型接口等简单解释
https://blog.csdn.net/dap769815768/article/details/81946506 只是比较简单的解释,在实际使用中,如果遇到需要深入研究的场景,再翻阅相关资料深入研究下。 一、泛型T 这个T在实际使用中很常见,比如List<T>。其实我们还…...

C语言——指针(五)
📝前言: 上篇文章C语言——指针(四)更加深入的介绍了不同类型指针的特点,这篇文章主要想记录一下函数与指针的结合运用以及const和assert关于指针的用法: 1,函数与指针 2,const 3&am…...

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《考虑气电联合需求响应的气电综合能源配网系统协调优化运行》
这个标题涉及到一个涉及气体(天然气)和电力的综合能源配网系统,并且强调了考虑气电联合需求响应的协调优化运行。让我们逐步解读: 气电综合能源配网系统: 这指的是一个结合了气体(通常是天然气)…...