登录界面的用户名和端口号不能重复!
登录界面的用户名和端口号不能重复!
登录界面的用户名和端口号不能重复!

java的socket编写的聊天室,GUI的界面,可以私聊和群聊,
聊天信息保存为txt

有需要的可以自行下载,可以先观看教学视频再决定是否购买

下载链接:
https://download.csdn.net/download/qq_52889967/20065491

教学视频:
https://v.qq.com/x/page/u3258g37y8s.html

java学生成绩管理系统(GUI界面):
https://blog.csdn.net/qq_52889967/article/details/118581246

运行结果:



保存结果:在D盘
“D:\私聊记录.txt”
“D:\群聊记录.txt”

部分源代码展示:

部分源代码如下:
服务端:

package myproject;import java.awt.Font;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.ArrayList;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;public class UI {//    定义文本区public static JTextArea text_area=new JTextArea();
//  定义存储从客户端接受到的客户用户名、IP和端口号public static ArrayList<String> all_userArrayList=new ArrayList<String>();public static ArrayList<String> all_userArrayList_IP=new ArrayList<String>();public static ArrayList<String> all_userArrayList_Port=new ArrayList<String>();// 定义存储客户端IP的Stringpublic static String IP =null;public static void main(String[] args) {// TODO Auto-generated method stubUI ui=new UI();ui.init_1();}//    定义服务器界面public void init_1() {//      定义窗口JFrame jframe_1=new JFrame("服务器");//     服务器关闭时,保存分割线(防止不同的txt保存混在一起)jframe_1.addWindowListener(new WindowListener() {@Overridepublic void windowOpened(WindowEvent e) {}@Overridepublic void windowClosing(WindowEvent e) {// 此处加入操作动作
//              保存群聊的分割线Save.save_1("-----------分割线-----------", "-----------分割线-----------");
//              保存私聊的分割线Save.save_2("-----------分割线-----------", "-----------分割线-----------",null);}@Overridepublic void windowClosed(WindowEvent e) {}@Overridepublic void windowIconified(WindowEvent e) {}@Overridepublic void windowDeiconified(WindowEvent e) {}@Overridepublic void windowActivated(WindowEvent e) {}@Overridepublic void windowDeactivated(WindowEvent e) {}});//       设置窗口大小jframe_1.setSize(400,400);
//      窗口不能调整jframe_1.setResizable(false);
//      空布局jframe_1.setLayout(null);
//      退出则关闭程序jframe_1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//      定义按钮JButton jbutton_1=new JButton("开启服务器");
//      设置按钮位置和大小jbutton_1.setBounds(130,0,130,40);
//      将按钮添加到窗口jframe_1.add(jbutton_1);//      设置文本区位置和大小text_area.setBounds(0,50,385,310);
//      设置文本区不可编辑text_area.setEditable(false);
//      定义滚动面板JScrollPane sp_3=new JScrollPane(text_area);sp_3.setLocation(0,50);sp_3.setSize(385,310);
//      定义字体Font font=new Font("宋体",Font.BOLD,16);sp_3.setFont(font);jframe_1.add(sp_3);//       注册开启服务器按钮的监听EventListener e=new EventListener(jbutton_1);jbutton_1.addActionListener(e);
//      窗口居中jframe_1.setLocationRelativeTo(null);
//      显示窗口jframe_1.setVisible(true);  }}
package myproject;import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;import javax.swing.JOptionPane;// 开启服务器的server(多线程)
// 每个客户端与服务器连接后,都会将自己的用户名和端口号发送过来(只接收客户端用户名、IP和端口号)
public class Server_1 extends Thread {public static ServerSocket server_1=null;public static Socket socket_1=null;
//  定义输入流,用于接收客户端发送的消息public static InputStream input_1=null;public static DataInputStream dinput_1=null;
//  定义字符串用于暂时存储信息String s=null;//启动线程的方法public void run() {//      死循环,当有客户端连接时,循环等待下一个客户端while(true) {//          异常捕获try {//              开放2021端口server_1=new ServerSocket(2021);
//              调用获取socket方法,等待连接socket_1=server_1.accept();
//              获取输入流input_1=socket_1.getInputStream();dinput_1=new DataInputStream(input_1);//               读取用户名并添加s =dinput_1.readUTF();UI.all_userArrayList.add(s);//               读取IPUI.IP=dinput_1.readUTF();
//              处理接收到的IP,接收的IP格式为主机名/ip,我们只需要后面的部分(通过正则表达式匹配数据)String str[]=UI.IP.split("/");
//              str[1]为我们需要的数据UI.IP=str[1];UI.all_userArrayList_IP.add(UI.IP);
//              System.out.println("IP:"+UI.all_userArrayList_IP);//             读取端口号并添加UI.all_userArrayList_Port.add(dinput_1.readUTF());
//              System.out.println("端口号:"+UI.all_userArrayList_Port);
//              提示用户上线UI.text_area.append("用户->"+s+" 上线了!\n");}catch (Exception e) {System.out.println(e);JOptionPane.showMessageDialog(null, "Server_1服务器异常!!!","错误提示",JOptionPane.WARNING_MESSAGE);break;}finally {if(dinput_1!=null) {try {dinput_1.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(input_1!=null) {try {input_1.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(socket_1!=null) {try {socket_1.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}if(server_1!=null) {try {server_1.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}  }
}
package myproject;import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;import javax.swing.JOptionPane;//只用于将当前在线人数传递到客户端
public class Server_3 extends Thread {public static ServerSocket server_1=null;public static Socket socket_1=null;
//  定义输出流public static OutputStream output_1=null;public static DataOutputStream doutput_1=null;//启动线程的方法public void run() {//      死循环,当有客户端连接时,循环等待下一个客户端while(true) {//          异常捕获try {//              开放2023端口server_1=new ServerSocket(2023);
//              调用获取socket方法,等待连接socket_1=server_1.accept();
//              获取输出流output_1=socket_1.getOutputStream();doutput_1=new DataOutputStream(output_1);
//              发送用户数量doutput_1.writeUTF(""+UI.all_userArrayList.size());
//              发送用户名for(int i=0;i<UI.all_userArrayList.size();i++) {doutput_1.writeUTF(UI.all_userArrayList.get(i));
//                  System.out.println(UI.all_userArrayList);}
//              System.out.println(UI.all_userArrayList.size());
//              System.out.println("服务端:"+UI.all_userArrayList);}catch (Exception e) {System.out.println(e);JOptionPane.showMessageDialog(null, "Server_3服务器异常!!!","错误提示",JOptionPane.WARNING_MESSAGE);break;}finally {if(doutput_1!=null) {try {doutput_1.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(output_1!=null) {try {output_1.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(socket_1!=null) {try {socket_1.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}if(server_1!=null) {try {server_1.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}  }
}

客户端:

package myproject;import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.util.ArrayList;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 UI {//  窗口public static JFrame jframe_1 = new JFrame("聊天小程序");
//  定义容器public static JFrame jframe_2=new JFrame("登录");
//  设置面板public static JPanel p_1 = new JPanel(null);public static JPanel p_2 = new JPanel(null);public static JPanel p_3 = new JPanel(null);
//  按钮public static JButton jbutton_1 = new JButton("发送");
//  文本框public static JTextField text_1 = new JTextField();
//  文本区public static JTextArea text_area_1 = new JTextArea();public static JTextArea text_area_2 = new JTextArea();
//  注册用户名public static String user;
//  定义从客户端接受到的客户用户名,用于私聊展示public static ArrayList<String> all_userArrayList=new ArrayList<String>();public static void main(String[] args) {UI ui = new UI();ui.init();}// 登录界面public void init() {//      流式布局jframe_2.setLayout(new FlowLayout());
//      设置窗口大小jframe_2.setSize(250,150);
//      居中显示jframe_2.setLocationRelativeTo(null);
//      退出后程序结束jframe_2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//      定义标签JLabel l_1=new JLabel("用户名: ");JLabel l_2=new JLabel("服务器IP: ");
//      定义字体(宋体,加粗)Font font_1=new Font("宋体",Font.BOLD,20);l_1.setFont(font_1);l_2.setFont(font_1);
//      定义文本框JTextField text_2=new JTextField(10);JTextField text_3=new JTextField(10);text_2.setText("192.168.1.3");
//      定义按钮JButton jbutton_2=new JButton("注册并登录");jframe_2.add(l_2);jframe_2.add(text_2);jframe_2.add(l_1);jframe_2.add(text_3);jframe_2.add(jbutton_2);
//      注册监听EventListener_1 e_2=new EventListener_1(text_2,text_3);jbutton_2.addActionListener(e_2);
//      显示窗口jframe_2.setVisible(true);}//   主界面public static void init_1() {//      空布局jframe_1.setLayout(null);;
//      窗口大小jframe_1.setSize(600,400);
//      窗口居中jframe_1.setLocationRelativeTo(null);
//      窗口不能调整jframe_1.setResizable(false);
//      退出后程序结束jframe_1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//      设置面板p_1.setLocation(0,0);p_2.setLocation(320,0);p_3.setLocation(0,300);p_1.setSize(280,280);p_2.setSize(280,400);p_3.setSize(280,100);p_2.setSize(280,400);p_1.setBackground(Color.LIGHT_GRAY);p_2.setBackground(Color.LIGHT_GRAY);p_3.setBackground(Color.LIGHT_GRAY);jframe_1.add(p_1);jframe_1.add(p_2);jframe_1.add(p_3);
//      设置按钮和文本框text_1.setBounds(0,0,180,30);jbutton_1.setBounds(220,0,60,30);p_3.add(text_1);p_3.add(jbutton_1);
//      定义服务器开启或关闭按钮JButton jbutton_2= new JButton("连接服务器");JButton jbutton_3= new JButton("查看在线人数");jbutton_2.setBounds(0,0,100,40);jbutton_3.setBounds(155,0,110,40);
//      设置文本区text_area_1.setBounds(0,0,280,280);text_area_2.setBounds(0,50,280,280);
//      设置文本区不可编辑text_area_1.setEditable(false);text_area_2.setEditable(false);
//      定义字体(宋体,加粗)Font font_1=new Font("宋体",Font.BOLD,16);//将text_area_1作为可滚动面板sp的显示区域JScrollPane sp_1=new JScrollPane(text_area_1);JScrollPane sp_2=new JScrollPane(text_area_2);sp_1.setLocation(0,0);sp_2.setLocation(0,50);sp_1.setSize(280,280);sp_2.setSize(280,280);
//      设置文本区字体text_area_1.setFont(font_1);text_area_2.setFont(font_1);p_1.add(sp_1);p_2.add(sp_2);
//      将服务器开启和查看在线人数按钮添加到p_2p_2.add(jbutton_2);p_2.add(jbutton_3);jframe_1.setVisible(true);//     注册 发送按钮 监听EventListener e_1 = new EventListener(text_area_1,text_1);jbutton_1.addActionListener(e_1);
//      注册连接服务器按钮的监听EventListener_2 e_2=new EventListener_2(jbutton_2);jbutton_2.addActionListener(e_2);}}

java实现聊天室(GUI界面+私聊+群聊)相关推荐

  1. java多人聊天室实现(可群聊私聊/添加好友/发送文件)

    一.功能介绍 本程序基于websocket实现,程序主要借鉴参考 https://www.cnblogs.com/csu-lmw/p/10981374.html,并在原程序的基本框架下扩充了添加好友以 ...

  2. Agora RTM,声网sdkdemo,在线聊天室,一对一,群聊

    appid或者其他功能 可参考 声网https://docs.agora.io/cn/Real-time-Messaging/API%20Reference/RTM_web/index.html js ...

  3. SpringBoot与webSocket实现在线聊天室——实现私聊+群聊+聊天记录保存

    SpringBoot与webSocket实现在线聊天室--实现私聊+群聊+聊天记录保存 引用参考:原文章地址:https://blog.csdn.net/qq_41463655/article/det ...

  4. 2020暑假集训项目——Java简易聊天室

    经过一周的学习与搬砖,我成功的完成了暑假集训的第一个项目--Java简易聊天室,这里对整个项目做一个总结.(文末附下载地址) 本项目支持的功能: 1.可同时开启多个客户端进行多人聊天: 2.可与在线的 ...

  5. Java网络聊天室---个人博客

    Java网络聊天室 ---个人博客 一.项目简介 功能描述: 使用图形用户界面和socket通信,能实现一个聊天室中多人聊天,可以两人私聊,可以发送文件. 实现类似QQ用户注册.登录.聊天等功能. 参 ...

  6. JAVA版聊天室小软件

    这是一篇关于JAVA的聊天室室小软件,用的swing的技术同时也用到了socket.今天发布出来,希望能帮到大家. 文章目录 开发环境 项目结构 下载地址: 一.运行画面展示 二.代码部分 1.客户端 ...

  7. 基于java的聊天室系统设计与实现(项目报告+开题报告+答辩PPT+源代码+部署视频)

    项目报告 Java网络聊天室系统的设计与实现 计算机从出现到现在有了飞速的发展,现阶段的计算机已经不单单是用于进行运算的独立的个体了,跟随计算机一同发展的还有互联网技术,经过了长久的发展,互联网技术有 ...

  8. Java+Swing聊天室

    Java+Swing聊天室 一.系统介绍 二.系统展示 1.发送消息 2.清屏 三.系统实现 四.其他 1.其它系统 2.获取源码 一.系统介绍 本系统实现了简单的聊天室功能:发送消息.清屏.退出系统 ...

  9. java 嘻嘻哈哈聊天室

    服务端 package 夏日聊天室; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.I ...

  10. Java实现人民币大写+GUI界面

    项目资源下载链接Java实现人民币大写+GUI界面 文章标题 1.提要 2.算法 3. 代码 (1)界面:windowbuilder插件的使用 (2)实现人民币转换的类 Convert.java (3 ...

最新文章

  1. .NET(C#)连接各类数据库-集锦
  2. 配深度学习环境要注意的不多,也就
  3. python机器学习可视化工具Yellowbrick绘图获取最佳聚类K值实战示例
  4. poj1330|bzoj3732|noip2013 货车运输 kruskal+倍增lca
  5. 【身边的经济学】节约打印用纸
  6. 网络层协议简介之ICMP和ARP
  7. python多行语句用反斜杠_抗联部队规定新战士每年必须学会多少个生字
  8. python1~10阶乘while_Python3基础 while 阶乘
  9. Spring MVC使用指示符重定向
  10. 防火墙上开放Oracle服务端口1521的方法
  11. qt5调用python脚本 两次失败_Qt5调用Python脚本中的函数
  12. JAVA day06 酒店管理系统
  13. 西南大学C语言2019年12月,西南大学[1056]计算机基础2020年12月机考参考答案
  14. CAP 原理这样理解最简单
  15. 公共云存储服务的可扩展性和性能
  16. 哔哩哔哩助手V0.8.16.28
  17. android 图片拍照,Android拍照及图片处理类应用盘点
  18. android 圆形头像方案,android圆形头像实现
  19. 【巨人的肩膀上制造世界】——5——Unity3D实用插件之Mouse Interaction-Object Highlight,快速构建模型的悬浮高亮!悬浮提示!悬浮动画!
  20. 博客新地址http://zhen217.iteye.com/

热门文章

  1. 初识KnockoutJS
  2. 佐罗一键新机数据导出导入文件夹
  3. TCL语言编译器安装及使用
  4. html5shiv.js分析-读源码之javascript系列
  5. 高等数学和数学分析教材推荐及其学习方法浅谈
  6. 分享10套好看的简历模板 | 免费Word模板下载
  7. c# 服务器打印word文档,C#完成word文档打印的方法
  8. MCSA Server 2012 R2 Passthrough Disk
  9. LED灯具检验标准与方法
  10. Echarts实现双y轴(不同刻度)