基于socket实现java Swing简易聊天室[附完整源码]

简介: 基于socket实现java Swing简易聊天室[附完整源码]

一、程序设计方面的说明

程序分为三个类:

  • ChatFrame类
  • ChatClientAPP类
  • ChatServerAPP类

二、各个类介绍

1、ChatFrame类

package com.chat;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class ChatFrame extends JFrame{
  private static final long serialVersionUID = -499796932332494480L;
  public JTextArea jta;
  public JScrollPane jsp;
  public JPanel jp;
  public JTextField jtf;
  public JButton jb;
  public String title;
  public ChatFrame(String title){
    this.title = title;
    jta = new JTextArea();
    jta.setEditable(false);
    jsp = new JScrollPane(jta);
    jp = new JPanel();
    jtf = new JTextField(10);
    jb = new JButton("发送");
    jp.add(jtf);
    jp.add(jb);
    this.add(jsp, BorderLayout.CENTER);
    this.add(jp, BorderLayout.SOUTH);
    this.setTitle(title);
    this.setSize(300, 300);
    this.setLocation(500, 300);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
  }
}

2、ChatClientAPP类

客户端类

package com.chat;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.UIManager;
public class ChatClientAPP implements ActionListener, KeyListener {
  public static void main(String[] args) throws Exception {
    UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    new ChatClientAPP(new ChatFrame("繁星聊天客户端"));
  }
  private BufferedWriter bh = null;
  private JTextField jtf;
  private JTextArea jta;
  public ChatClientAPP(ChatFrame chatFrame) {
    this.jtf = chatFrame.jtf;
    this.jta = chatFrame.jta;
    chatFrame.jb.addActionListener(this);
    jtf.addKeyListener(this);
    try {
      Socket Socket = new Socket("127.0.0.1", 8888);
      // InputStream in=Socket.getInputStream();
      BufferedReader br = new BufferedReader(new InputStreamReader(Socket.getInputStream()));
      bh = new BufferedWriter(new OutputStreamWriter(Socket.getOutputStream()));
      String line = null;
      Date sb = new Date();
      SimpleDateFormat sdf = new SimpleDateFormat();
      sdf.format(sb);
      jta.append("\t" + sdf.format(sb) + "\n");
      while ((line = br.readLine()) != null) {
        jta.append(line + System.lineSeparator());
      }
      Socket.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  @Override
  public void actionPerformed(ActionEvent e) {
    wdw();
  }
  // 定义一个方法
  private void wdw() {
    String text = jtf.getText();
    text = "客户端对服务端说:" + text;
    jta.append(text + System.lineSeparator());
    try {
      bh.write(text);
      bh.newLine();
      bh.flush();
      jtf.setText("");
    } catch (IOException e1) {
      e1.printStackTrace();
    }
  }
  @Override
  public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_ENTER) {
      wdw();
    }
  }
  @Override
  public void keyTyped(KeyEvent e) {
  }
  @Override
  public void keyReleased(KeyEvent e) {
  }
}

3、ChatClientAPP类

服务端类

package com.chat;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.UIManager;
public class ChatServerAPP implements ActionListener, KeyListener {
  public static void main(String[] args) throws Exception {
    UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    new ChatServerAPP(new ChatFrame("繁星聊天服务端"));
  }
  private JTextArea jta;
  private JTextField jtf;
  private BufferedWriter bh = null;
  public ChatServerAPP(ChatFrame chatFrame) {
    this.jtf = chatFrame.jtf;
    this.jta = chatFrame.jta;
    chatFrame.jb.addActionListener(this);
    jtf.addKeyListener(this);
    try {
      @SuppressWarnings("resource")
      ServerSocket ServerSocket = new ServerSocket(8888);
      Socket Socket = ServerSocket.accept();
      // InputStream in=Socket.getInputStream();
      BufferedReader br = new BufferedReader(new InputStreamReader(Socket.getInputStream()));
      bh = new BufferedWriter(new OutputStreamWriter(Socket.getOutputStream()));
      String line = null;
      Date sb = new Date();
      SimpleDateFormat sdf = new SimpleDateFormat();
      sdf.format(sb);
      jta.append("\t" + sdf.format(sb) + "\n");
      while ((line = br.readLine()) != null) {
        jta.append(line + System.lineSeparator());
      }
      Socket.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  @Override
  public void actionPerformed(ActionEvent e) {
    wdw();
  }
  // 定义一个方法
  private void wdw() {
    String text = jtf.getText();
    text = "服务端对客户端说:" + text;
    jta.append(text + System.lineSeparator());
    try {
      bh.write(text);
      bh.newLine();
      bh.flush();
      jtf.setText("");
    } catch (IOException e1) {
      e1.printStackTrace();
    }
  }
  @Override
  public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_ENTER) {
      wdw();
    }
  }
  @Override
  public void keyTyped(KeyEvent e) {
  }
  @Override
  public void keyReleased(KeyEvent e) {
  }
}


相关文章
|
8月前
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
512 7
|
8月前
|
消息中间件 算法 安全
JUC并发—1.Java集合包底层源码剖析
本文主要对JDK中的集合包源码进行了剖析。
|
8月前
|
人工智能 安全 Java
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
278 5
|
3月前
|
存储 安全 固态存储
基于C#实现的支持文件传输的Socket聊天室
基于C#实现的支持文件传输的Socket聊天室
231 5
|
3月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
8月前
|
存储 Java
【源码】【Java并发】【ThreadLocal】适合中学者体质的ThreadLocal源码阅读
前言 下面,跟上主播的节奏,马上开始ThreadLocal源码的阅读( ̄▽ ̄)" 内部结构 如下图所示,我们可以知道,每个线程,都有自己的threadLocals字段,指向ThreadLocalMap
524 81
【源码】【Java并发】【ThreadLocal】适合中学者体质的ThreadLocal源码阅读
|
8月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
501 70
|
7月前
|
JavaScript Java 关系型数据库
家政系统源码,java版本
这是一款基于SpringBoot后端框架、MySQL数据库及Uniapp移动端开发的家政预约上门服务系统。
219 6
家政系统源码,java版本
|
7月前
|
供应链 JavaScript 前端开发
Java基于SaaS模式多租户ERP系统源码
ERP,全称 Enterprise Resource Planning 即企业资源计划。是一种集成化的管理软件系统,它通过信息技术手段,将企业的各个业务流程和资源管理进行整合,以提高企业的运营效率和管理水平,它是一种先进的企业管理理念和信息化管理系统。 适用于小微企业的 SaaS模式多租户ERP管理系统, 采用最新的技术栈开发, 让企业简单上云。专注于小微企业的应用需求,如企业基本的进销存、询价,报价, 采购、销售、MRP生产制造、品质管理、仓库库存管理、财务应收付款, OA办公单据、CRM等。
411 23
|
6月前
|
存储 安全 Java
Java 集合面试题从数据结构到 HashMap 源码剖析详解及长尾考点梳理
本文深入解析Java集合框架,涵盖基础概念、常见集合类型及HashMap的底层数据结构与源码实现。从Collection、Map到Iterator接口,逐一剖析其特性与应用场景。重点解读HashMap在JDK1.7与1.8中的数据结构演变,包括数组+链表+红黑树优化,以及put方法和扩容机制的实现细节。结合订单管理与用户权限管理等实际案例,展示集合框架的应用价值,助你全面掌握相关知识,轻松应对面试与开发需求。
307 3