一v一聊天

服务端

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);}}

运行结果如下:

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

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

相关文章

使用加密工具The Enigma Protector ,快速保护您的软件安全

我们多次被问到使用Enigma Protector保护软件免遭破解和逆向工程的最佳方法是什么&#xff1f;在这里我将解释保护常用应用程序的技巧是什么。 许多开发人员认为&#xff0c;如果他们只需单击“保护”按钮&#xff0c;保护程序就会自动完成所有操作&#xff0c;无需嵌入额外的…

【Java基础系列】JavaWeb入门

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

「C++」哈希表的实现(unordered系底层)

&#x1f4bb;文章目录 &#x1f4c4;前言哈希表概念哈希函数 哈希冲突闭散列开散列 &#x1f4d3;总结 &#x1f4c4;前言 unordered系列的关联式容器之所以效率比较高,是因为其底层使用了哈希结构&#xff0c;使其在查找上的时间复杂度几乎减低到了 O ( 1 ) O(1) O(1)。 哈希…

企业ERP软件定制开发的重点|app小程序网站建设

企业ERP软件定制开发的重点|app小程序网站建设 随着企业信息化程度的不断提高&#xff0c;企业资源计划&#xff08;ERP&#xff09;软件成为了现代企业管理的重要工具。然而&#xff0c;由于不同企业的业务流程、组织结构和管理模式各异&#xff0c;现有的通用ERP软件无法完全…

基于若依的ruoyi-nbcio的flowable流程管理系统增加服务任务和我的抄送功能

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 1、增加一个状态字段 wf_copy增加下面两个字段 就用未读已读来区分 2、前端 api接口增加如下&#xff…

IDEA检查项目的jdk版本需要看的地方

IDEA检查项目的jdk版本需要看的地方 1、检查项目结构&#xff0c;如下图所示选择即可 选择了之后打开了如下界面&#xff1a; 下面的三张图全部都要检查选择jdk8的版本 2、进入设置&#xff0c;如下所示&#xff1a; 进入之后&#xff0c;根据下图&#xff0c;挨个选择&#xf…

「海蓝色」海关可视化监管平台,助力海关体系实现规范化程序管理

海关监管是国家对进出境货物、旅客和邮件进行检查和控制的重要机构&#xff0c;其职责是保障国家的安全和经济利益。海关监管的核心目标是防止非法进出境活动&#xff0c;包括走私、偷逃税款等行为。海关监管通过检查和核实货物的品质、数量和价值&#xff0c;确保货物符合相关…

SMART PLC编码器角度测量

编码器角度测量在倒立摆摆杆角度测量上的应用请参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/131443657https://rxxw-control.blog.csdn.net/article/details/131443657线性模式下编码器旋转圈数和单圈计数值测量可以查看下面文章: https://rxxw…

C语言实现植物大战僵尸(完整版)

实现这个游戏需要Easy_X 这个在我前面一篇C之番外篇爱心代码有程序教你怎么下载&#xff0c;大家可自行查看 然后就是需要植物大战僵尸的素材和音乐&#xff0c;需要的可以在评论区 首先是main.cpp //开发日志 //1导入素材 //2实现最开始的游戏场景 //3实现游戏顶部的工具栏…

关于pycharm代码误删,本地历史恢复

关于pycharm代码误删&#xff0c;本地历史恢复 1.工作中或多或少的出现代码误删&#xff0c;或者其他原因导致我们的辛辛苦苦写的码子没了&#xff0c;一定很着急。 2.我们点击工作目录文件夹或者是项目内鼠标右击&#xff0c;找到local history 然后选择show history,就可以…

Python3+RIDE+RobotFramework自动化测试框架搭建过程详解

一、Python安装 最新版Python下载地址&#xff1a;https://www.python.org/ 根据操作系统选择对应版本制品下载安装即可&#xff0c;本机用的是Windows x86-64 executable installer。 注意事项&#xff1a; 安装完成后检查下环境变量&#xff0c;默认会配置好&#xff0c;可…

算法初阶双指针+C语言期末考试之编程题加强训练

双指针 常⻅的双指针有两种形式&#xff0c;⼀种是对撞指针&#xff0c;⼀种是左右指针。 对撞指针&#xff1a;⼀般⽤于顺序结构中&#xff0c;也称左右指针。 • 对撞指针从两端向中间移动。⼀个指针从最左端开始&#xff0c;另⼀个从最右端开始&#xff0c;然后逐渐往中间逼…

【链表Linked List】力扣-2 两数相加

目录 题目描述 解题过程 题目描述 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 …

JVM GUI可视化监控及诊断工具

工具既述 使用命令行工具或组合能帮您获取目标Java应用性能相关的基础信息&#xff0c;但它们存在下列局限&#xff1a; 无法获取方法级别的分析数据&#xff0c;如方法间的调用关系、各方法的调用次数和调用时间等&#xff08;这对定位应用性能瓶颈至关重要&#xff09;。要…

决战排序之巅(一)

决战排序之巅 插入排序直接插入排序 void InsertSort(int* arr, int n)希尔排序 void ShellSort(int* arr, int n)测试插入排序测试函数 void verify(int* arr, int n)测试 InsertSort测试 ShellSort测试速度 InsertSort & ShellSort 选择排序直接选择排序 void SelectSort…

初试Jakarta EE项目 - Servlet + JSP

文章目录 一、Jakarta EE概述二、Servlet概述&#xff08;一&#xff09;Servlet的概念&#xff08;二&#xff09;Servlet的工作原理&#xff08;三&#xff09;Servlet的特点1、独立性2、灵活性3、生命周期管理 &#xff08;四&#xff09;Servlet的应用场景&#xff08;五&a…

从零开始,利用ChatGPT学会写作的完整指南

文章目录 前言了解ChatGPT访问OpenAI平台使用ChatGPT进行简单的对话定义写作主题逐步生成文章段落添加个性化和细节编辑和润色反复修改直至满意 图书推荐内容简介作者简介获取方式 前言 在数字时代&#xff0c;人工智能技术日益成熟&#xff0c;为我们提供了全新的学习和创作机…

Linux CentOS本地部署SQL Server数据库结合cpolar内网穿透实现公网访问

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 安装sql server二. 局域网测试连接三. 安装cpolar内网穿透四. 将sqlserver映射…

AI报告专题:创造性和生成式人工智能

今天分享的AI系列深度研究报告&#xff1a;《AI报告专题&#xff1a;创造性和生成式人工智能》。 &#xff08;报告出品方&#xff1a;Capgemini&#xff09; 报告共计&#xff1a;64页 AI一代 生成式人工智能 (AI)正在迅速改变我们与技术的交互方式&#xff0c;使机器能够创…

基于ssm在线医疗服务系统论文

摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关键。因此医疗服务信息的…