一对一聊天

服务端

 
  1. package 一对一用户;

  2. import java.awt.BorderLayout;

  3. import java.io.BufferedReader;

  4. import java.io.IOException;

  5. import java.io.InputStreamReader;

  6. import java.io.PrintWriter;

  7. import java.net.ServerSocket;

  8. import java.net.Socket;

  9. import java.util.Vector;

  10. import javax.swing.JFrame;

  11. import javax.swing.JScrollPane;

  12. import javax.swing.JTextArea;

  13. public class fuwuchuangkou extends JFrame {

  14. private JTextArea ta_info;

  15. private ServerSocket server; // 声明ServerSocket对象

  16. private Socket socket; // 声明Socket对象socket

  17. private Vector<Socket> vector = new Vector<Socket>();// 用于存储连接到服务器的客户端套接字对象

  18. public void createSocket() {

  19. try {

  20. server = new ServerSocket(1978);

  21. while (true) {

  22. ta_info.append("等待新客户连接......\n");

  23. socket = server.accept();// 创建套接字对象

  24. vector.add(socket);// 将套接字对象添加到向量对象中

  25. ta_info.append("客户端连接成功。" + socket + "\n");

  26. new ServerThread(socket).start();// 创建并启动线程对象

  27. }

  28. } catch (IOException e) {

  29. e.printStackTrace();

  30. }

  31. }

  32. class ServerThread extends Thread {

  33. Socket socket;

  34. public ServerThread(Socket socket) {

  35. this.socket = socket;

  36. }

  37. public void run() {

  38. try {

  39. BufferedReader in = new BufferedReader(new InputStreamReader(

  40. socket.getInputStream()));// 创建输入流对象

  41. while (true) {

  42. String info = in.readLine();// 读取信息

  43. for (Socket s : vector) {// 遍历所有客户端套接字对象

  44. if (s != socket) {// 如果不是发送信息的套接字对象

  45. PrintWriter out = new PrintWriter(s

  46. .getOutputStream(), true);// 创建输出流对象

  47. out.println(info);// 发送信息

  48. out.flush();// 刷新输出缓冲区

  49. }

  50. }

  51. }

  52. } catch (IOException e) {

  53. ta_info.append(socket + "已经退出。\n");

  54. vector.remove(socket);// 移除退出的客户端套接字

  55. }

  56. }

  57. }

  58. public static void main(String args[]) {

  59. fuwuchuangkou frame = new fuwuchuangkou();

  60. frame.setVisible(true);

  61. frame.createSocket();

  62. }

  63. /**

  64. * Create the frame

  65. */

  66. public fuwuchuangkou() {

  67. super();

  68. setTitle("一对一");

  69. setBounds(100, 100, 385, 266);

  70. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  71. final JScrollPane scrollPane = new JScrollPane();

  72. getContentPane().add(scrollPane, BorderLayout.CENTER);

  73. ta_info = new JTextArea();

  74. scrollPane.setViewportView(ta_info);

  75. }

  76. }

客户端

 
  1. package 一对一用户;

  2. import java.awt.BorderLayout;

  3. import java.awt.Dimension;

  4. import java.awt.EventQueue;

  5. import java.awt.event.ActionEvent;

  6. import java.awt.event.ActionListener;

  7. import java.io.BufferedReader;

  8. import java.io.IOException;

  9. import java.io.InputStreamReader;

  10. import java.io.PrintWriter;

  11. import java.net.Socket;

  12. import java.net.UnknownHostException;

  13. import javax.swing.JButton;

  14. import javax.swing.JFrame;

  15. import javax.swing.JLabel;

  16. import javax.swing.JPanel;

  17. import javax.swing.JScrollPane;

  18. import javax.swing.JTextArea;

  19. import javax.swing.JTextField;

  20. public class kehuchuangkou extends JFrame {

  21. private JTextArea ta_info;

  22. private JTextField tf_send;

  23. PrintWriter out;// 声明输出流对象

  24. /**

  25. * Launch the application

  26. *

  27. * @param args

  28. */

  29. public static void main(String args[]) {

  30. EventQueue.invokeLater(new Runnable() {

  31. public void run() {

  32. try {

  33. kehuchuangkou frame = new kehuchuangkou();

  34. frame.setVisible(true);

  35. frame.createClientSocket();

  36. } catch (Exception e) {

  37. e.printStackTrace();

  38. }

  39. }

  40. });

  41. }

  42. public void createClientSocket() {

  43. try {

  44. Socket socket = new Socket("127.0.0.1", 1978);// 连接本地1978端口

  45. out = new PrintWriter(socket.getOutputStream(), true);// 创建输出流对象

  46. new ClientThread(socket).start();// 创建并启动线程对象

  47. } catch (UnknownHostException e) {

  48. e.printStackTrace();

  49. } catch (IOException e) {

  50. e.printStackTrace();

  51. }

  52. }

  53. class ClientThread extends Thread {

  54. Socket socket;

  55. public ClientThread(Socket socket) {

  56. this.socket = socket;

  57. }

  58. public void run() {

  59. try {

  60. BufferedReader in = new BufferedReader(new InputStreamReader(

  61. socket.getInputStream()));// 创建输入流对象

  62. while (true) {

  63. String info = in.readLine();// 读取信息

  64. ta_info.append(info + "\n");// 在文本域中显示信息

  65. if (info.equals("88")) {

  66. break;// 结束线程

  67. }

  68. }

  69. } catch (IOException e) {

  70. e.printStackTrace();

  71. }

  72. }

  73. }

  74. private void send() {

  75. String info = tf_send.getText();// 获得输入的信息

  76. if (info.equals("")) {

  77. return;// 如果没输入信息则返回,即不发送

  78. }

  79. if (info.equals("88")) {

  80. System.exit(0);// 如果没输入信息是88,则退出

  81. }

  82. out.println(info);// 发送信息

  83. out.flush();// 刷新输出缓冲区

  84. tf_send.setText(null);// 清空文本框

  85. }

  86. public kehuchuangkou() { //创建面板

  87. super();

  88. setTitle("一对一");

  89. setBounds(100, 100, 385, 266);

  90. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  91. final JPanel panel = new JPanel();

  92. getContentPane().add(panel, BorderLayout.SOUTH);

  93. final JLabel label = new JLabel();

  94. label.setText("输入聊天内容:");

  95. panel.add(label);

  96. tf_send = new JTextField();

  97. tf_send.addActionListener(new ActionListener() {

  98. public void actionPerformed(final ActionEvent e) {

  99. send();

  100. }

  101. });

  102. tf_send.setPreferredSize(new Dimension(180, 25));

  103. panel.add(tf_send);

  104. final JButton button = new JButton();

  105. button.addActionListener(new ActionListener() {

  106. public void actionPerformed(final ActionEvent e) {

  107. send();

  108. }

  109. });

  110. button.setText("发 送");

  111. panel.add(button);

  112. final JScrollPane scrollPane = new JScrollPane();

  113. getContentPane().add(scrollPane, BorderLayout.CENTER);

  114. ta_info = new JTextArea();

  115. scrollPane.setViewportView(ta_info);

  116. }

  117. }

 
  1. package 一对一用户;

  2. import java.awt.BorderLayout;

  3. import java.awt.Dimension;

  4. import java.awt.EventQueue;

  5. import java.awt.event.ActionEvent;

  6. import java.awt.event.ActionListener;

  7. import java.io.BufferedReader;

  8. import java.io.IOException;

  9. import java.io.InputStreamReader;

  10. import java.io.PrintWriter;

  11. import java.net.Socket;

  12. import java.net.UnknownHostException;

  13. import javax.swing.JButton;

  14. import javax.swing.JFrame;

  15. import javax.swing.JLabel;

  16. import javax.swing.JPanel;

  17. import javax.swing.JScrollPane;

  18. import javax.swing.JTextArea;

  19. import javax.swing.JTextField;

  20. public class kehu1 extends JFrame {

  21. private JTextArea ta_info;

  22. private JTextField tf_send;

  23. PrintWriter out;// 声明输出流对象

  24. /**

  25. * Launch the application

  26. *

  27. * @param args

  28. */

  29. public static void main(String args[]) {

  30. EventQueue.invokeLater(new Runnable() {

  31. public void run() {

  32. try {

  33. kehuchuangkou frame = new kehuchuangkou();

  34. frame.setVisible(true);

  35. frame.createClientSocket();

  36. } catch (Exception e) {

  37. e.printStackTrace();

  38. }

  39. }

  40. });

  41. }

  42. public void createClientSocket() {

  43. try {

  44. Socket socket = new Socket("127.0.0.1", 1978);// 连接本地1978端口

  45. out = new PrintWriter(socket.getOutputStream(), true);// 创建输出流对象

  46. new ClientThread(socket).start();// 创建并启动线程对象

  47. } catch (UnknownHostException e) {

  48. e.printStackTrace();

  49. } catch (IOException e) {

  50. e.printStackTrace();

  51. }

  52. }

  53. class ClientThread extends Thread {

  54. Socket socket;

  55. public ClientThread(Socket socket) {

  56. this.socket = socket;

  57. }

  58. public void run() {

  59. try {

  60. BufferedReader in = new BufferedReader(new InputStreamReader(

  61. socket.getInputStream()));// 创建输入流对象

  62. while (true) {

  63. String info = in.readLine();// 读取信息

  64. ta_info.append(info + "\n");// 在文本域中显示信息

  65. if (info.equals("88")) {

  66. break;// 结束线程

  67. }

  68. }

  69. } catch (IOException e) {

  70. e.printStackTrace();

  71. }

  72. }

  73. }

  74. private void send() {

  75. String info = tf_send.getText();// 获得输入的信息

  76. if (info.equals("")) {

  77. return;// 如果没输入信息则返回,即不发送

  78. }

  79. if (info.equals("88")) {

  80. System.exit(0);// 如果没输入信息是88,则退出

  81. }

  82. out.println(info);// 发送信息

  83. out.flush();// 刷新输出缓冲区

  84. tf_send.setText(null);// 清空文本框

  85. }

  86. public kehu1() { //创建面板

  87. super();

  88. setTitle("一对一");

  89. setBounds(100, 100, 385, 266);

  90. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  91. final JPanel panel = new JPanel();

  92. getContentPane().add(panel, BorderLayout.SOUTH);

  93. final JLabel label = new JLabel();

  94. label.setText("输入聊天内容:");

  95. panel.add(label);

  96. tf_send = new JTextField();

  97. tf_send.addActionListener(new ActionListener() {

  98. public void actionPerformed(final ActionEvent e) {

  99. send();

  100. }

  101. });

  102. tf_send.setPreferredSize(new Dimension(180, 25));

  103. panel.add(tf_send);

  104. final JButton button = new JButton();

  105. button.addActionListener(new ActionListener() {

  106. public void actionPerformed(final ActionEvent e) {

  107. send();

  108. }

  109. });

  110. button.setText("发 送");

  111. panel.add(button);

  112. final JScrollPane scrollPane = new JScrollPane();

  113. getContentPane().add(scrollPane, BorderLayout.CENTER);

  114. ta_info = new JTextArea();

  115. scrollPane.setViewportView(ta_info);

  116. }

  117. }

运行结果如下:

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

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

相关文章

GateWay网关介绍以及整合knife4j聚合所有服务的接口文档

为什么使用网关&#xff1f; 因为多个微服务的端口不同&#xff0c;前端调用不方便&#xff0c;使用网关可以统一接收处理前端的请求&#xff0c;同时方便接口的集中处理&#xff0c;比如鉴权、聚合接口文档、限流等等.. 这里使用Knife4j文档工具来实现接口文档&#xff1a;K…

ArcMap中构建金字塔详解

1.金字塔 1.1 定义 金字塔可用于改善性能。它们是原始栅格数据集的缩减采样版本&#xff0c;可包含多个缩减采样图层。金字塔的各个连续图层均以 2:1 的比例进行缩减采样。如下图所示。从金字塔的底层开始每四个相邻的像素经过重采样生成一个新的像素&#xff0c;依此重复进行…

C#winform上下班打卡系统Demo

C# winform上下班打卡系统Demo 系统效果如图所示 7个label控件(lblUsername、lblLoggedInEmployeeId、lab_IP、lblCheckOutTime、lblCheckInTime、lab_starttime、lab_endtime)、3个按钮、1个dataGridView控件、2个groupBox控件 C#代码实现 using System; using System.Dat…

【分布式微服务专题】从单体到分布式(二、SpringCloud整合Nacos)

目录 前言阅读对象阅读导航前置知识笔记正文一、下载安装二、项目整合2.1 服务注册与发现2.2 动态配置管理 三、其他实验四、服务之间的调用 学习总结感谢 前言 本篇笔记主要是记录我整合Nacos项目进来的过程。以实现服务注册发现&#xff0c;以及分布式配置管理。关于Nacos&a…

友思特分享 | Neuro-T:零代码自动深度学习训练平台

工业自动化、智能化浪潮涌进&#xff0c;视觉技术在其中扮演了至关重要的角色。在汽车、制造业、医药、芯片、食品等行业&#xff0c;基于视觉技术实现的缺陷检测具有非常大的需求。对于传统检测方法&#xff0c;目视检查方法能够有效检测非标、具有挑战性的缺陷&#xff0c;传…

在线教育小程序如何一键生成App

在线教育行业是指通过互联网平台提供的各种教育和培训服务。这不仅包括传统的课程学习&#xff0c;还涵盖了一系列创新的学习模式。例如&#xff0c;同步在线课程允许学生和教师在同一时间在线&#xff0c;通过实时的视频和聊天工具进行互动。而异步在线课程则为学生提供了更大…

2023年5个自动化EDA库推荐

EDA或探索性数据分析是一项耗时的工作&#xff0c;但是由于EDA是不可避免的&#xff0c;所以Python出现了很多自动化库来减少执行分析所需的时间。EDA的主要目标不是制作花哨的图形或创建彩色的图形&#xff0c;而是获得对数据集的理解&#xff0c;并获得对变量之间的分布和相关…

【Ambari】Python调用Rest API 获取YARN HA状态信息并发送钉钉告警

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&am…

Java项目学生管理系统一前后端环境搭建

在现代的软件开发中&#xff0c;学生管理系统是一个常见的应用场景。通过学生管理系统&#xff0c;学校能够方便地管理学生的信息、课程安排和成绩等数据。本文将介绍如何使用Java语言搭建一个学生管理系统的前后端环境&#xff0c;并提供一个简单的示例。 1.环境搭建 学生管…

web:[GXYCTF2019]BabyUpload(文件上传、一句话木马、文件过滤)

题目 页面显示为文件上传 随便上传一个文件看看 上传一个文本文件显示 上传了一个图片显示 上传包含一句话木马的图片 上传了一个包含php一句话木马的文件&#xff0c;显示如上 换一个写法 上传成功 尝试上传.htaccess&#xff0c;上传失败&#xff0c;用抓包修改文件后缀 …

No suitable driver found for jdbc:mysql://localhost:3306(2023/12/7更新)

有两种情况&#xff1a; 压根没安装下载了但没设为库或方法不对 大多数为第一种情况&#xff1a; 一. 下载jdbc 打开网址选择一个版本进行下载 https://nowjava.com/jar/version/mysql/mysql-connector-java.html 二.安装jdbc 在项目里建一个lib文件夹 在把之前下载的jar文…

【Vulnhub 靶场】【Funbox: GaoKao】【简单】【20210606】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/funbox-gaokao,707/ 靶场下载&#xff1a;https://download.vulnhub.com/funbox/FunboxGaoKao.ova 靶场难度&#xff1a;简单 发布日期&#xff1a;2021年06月06日 文件大小&#xff1a;1.3 GB 靶场作者&#…

Linux 多进程并发设计-进程对核的亲缘设置

1设计结构 2 设计优点 1 充分利用多核系统的并发处理能力2 负载均衡3 职责明确&#xff0c;管理进程仅负责管理&#xff0c;工作进程仅负责处理业务逻辑 3 演示代码: //main.cpp #define _GNU_SOURCE #include<sys/types.h> #include<sys/wait.h> #include <…

智能优化算法应用:基于金枪鱼群算法无线传感器网络(WSN)覆盖优化 - 附代码

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

代码混淆技术探究与工具选择

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

JAVA后端自学技能实操合集

JAVA后端自学技能实操 内容将会持续更新中,有需要添加什么内容可以再评论区留言,大家一起学习FastDFS使用docker安装FastDFS(linux)集成到springboot项目中 内容将会持续更新中,有需要添加什么内容可以再评论区留言,大家一起学习 FastDFS 组名&#xff1a;文件上传后所在的 st…

配置集群免密登录

文章目录 前言配置集群免密登录1. 设置主机名与 IP 地址的映射关系2. 生成 SSH 密钥对3. 将公钥复制到集群节点4. 测试免密登录5. 配置节点之间互相免密登录 总结 前言 本文介绍了如何配置集群之间免密登录&#xff0c;以便在搭建集群环境时方便地进行节点之间的通信。通过设置…

分布式搜索引擎elasticsearch(二)

1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查…

编程过程中出现bug如何应对?

编程过程中出现bug如何应对&#xff1f; 1.找错误原因 如果完全不知道出错的原因&#xff0c;或者说存在着很多错误的有原因&#xff0c;----》控制变量法 例如&#xff0c;昨天我在使用torchrun 多卡并行一个程序的时候&#xff0c;出现了大量的bug, 于是我将报错信息放在网…

UDP实现群聊

代码&#xff1a; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; import java.io.IOException; import java.lang.String;public class liaotian extends JFrame{private static final int DEFAULT_PORT8899;private JLabel stateLB…