广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java实现多人聊天系统
  • 622
分享到

java实现多人聊天系统

2024-04-02 19:04:59 622人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

本文实例为大家分享了java实现多人聊天系统的具体代码,供大家参考,具体内容如下 开发环境 windows 7 操作系统MyEclipse 聊天室程序结构设计 1.系统分为客户端、服

本文实例为大家分享了java实现多人聊天系统的具体代码,供大家参考,具体内容如下

开发环境

windows 7 操作系统
MyEclipse

聊天室程序结构设计

1.系统分为客户端、服务器端和连接服务器客户端三个模块。
2.客户端负责发送消息。
3.服务器端负责接收客户端发来的信息并执行相应操作处理,最后通过群发功能,使客户端将群聊的消息的显示出来。
4.连接服务器端负责连接服务器,从而进入客户端。

总体模块图

客户端代码

Client.java

package servlet;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
import java.io.OutputStreamWriter;

public class Client {
              Socket socket;
              BufferedWriter bw;
              BufferedReader br ;
        
public Client(String ip, int port){
         try {
              socket =new Socket(ip,port);
              bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
              br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
              }catch (UnknownHostException e){
              e.printStackTrace();
              }catch(IOException e){
              e.printStackTrace();
                }
    }
public void sendMessage(String message) {
          try{ 
              bw.write(message);
              bw.newLine();
              bw.flush();
       }catch(IOException e){
             e.printStackTrace();
    
     }
   }

public String reciveMessage() {
       String message=null;
       try { 
           message = br.readLine();
      }catch(IOException e) {
          e.printStackTrace();
      }
    return message;
}

public void close(){
     try{
     socket.close();
    }catch(IOException e){
    e.printStackTrace();
    }
}}

ClientFrame.java

package servlet;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.text.SimpleDateFORMat;
import java.util.Date;


import javax.swing.*;
import javax.swing.border.EmptyBorder;


public class ClientFrame extends JFrame {
    private JPanel contentPane;
    private JLabel lblUserName;
    private JTextField tfMessage;
    private JButton btnSend;
    private JTextArea textArea;
    private String userName;
    private Client client;

public ClientFrame(String ip,String userName){
    this.userName = userName;
    init();//添加窗体初始化内容
    addListener();
    client=new Client(ip,8080);
    ReadMessageThread t=new ReadMessageThread();
    t.start();
}
private class ReadMessageThread extends Thread{
     public void run() {
      while(true) {
          String str=client.reciveMessage();
          textArea.append(str+"\n");//添加文本内容
      }
  }
  
}
private void init(){
   setTitle("客户端");
   setResizable(false);
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   setBounds(100,100,450,300);

   contentPane = new JPanel();
   contentPane.setBorder(new EmptyBorder(5,5,5,5));
   contentPane.setLayout(null);
   setContentPane(contentPane);

   jscrollPane scrollPane = new JScrollPane();
   scrollPane.setBounds(5,5,434,229);
   contentPane.add(scrollPane);

  textArea =new JTextArea();
  scrollPane.setViewportView(textArea);
  textArea .setEditable(false);

  JPanel panel =new JPanel();
  panel.setBounds(5,235,434,32);
  contentPane.add(panel);
  panel.setLayout(null);

  lblUserName = new JLabel(userName);
  lblUserName.setHorizontalAlignment(SwinGConstants.TRaiLING);
  lblUserName.setBounds(2,4,55,22);
  panel.add(lblUserName);

  tfMessage =new JTextField();
  tfMessage.setBounds(62,5,274,22);
  tfMessage.setColumns(10);
  panel.add(tfMessage);

  btnSend =new JButton("发送");
  btnSend.setBounds(336,4,93,23);
  panel.add(btnSend);

  tfMessage.validate();
}
private void addListener(){
 btnSend.addActionListener(new ActionListener(){
  public void actionPerformed(ActionEvent e){
        Date date=new Date();
        SimpleDateFormat sf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        client.sendMessage(userName+""+sf.format(date)+":\n"+tfMessage.getText());
        tfMessage.setText("");//清空

          }
      });
   this.addWindowListener(new WindowAdapter(){//开启窗口监听
    public void windowClosing(WindowEvent atg0) {
        int op = JOptionPane.showConfirmDialog(ClientFrame.this,"确定要退出聊天室吗?","确定",JOptionPane.YES_NO_OPTION);
        if(op == JOptionPane.YES_OPTION) {
            client.sendMessage("%EXIT%:" + userName);
            try {
                Thread.sleep(200);
                
            }catch(InterruptedException e) {
                e.printStackTrace();
            }
            client.close();
            System.exit(0);
        }
         }
      });
  }
}

LinkServerFrame.java

package servlet;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
import javax.swing.border.EmptyBorder;

@SuppressWarnings("serial")
public class LinkServerFrame extends JFrame {

    private JPanel contentPane;//下方面板
    private JLabel lblIP;
    private JLabel lblUserName;
    private JTextField tfIP;
    private JTextField tfUserName;
    private JButton btnLink;


   public LinkServerFrame(){
    setTitle("连接服务器");
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 390, 150);

   contentPane = new JPanel();
   contentPane.setBorder(new EmptyBorder(5,5,5,5));
   contentPane.setLayout(null);
   setContentPane(contentPane);

   lblIP =new JLabel("服务器IP地址:");
   lblIP.setFont(new Font("微软雅黑",Font.PLAIN,14));
   lblIP.setBounds(20,15,100,15);
   contentPane.add(lblIP);

   tfIP =new JTextField("127.0.0.1");
   tfIP.setBounds(121,13,242,21);
   contentPane.add(tfIP);
   tfIP.setColumns(10);

   lblUserName = new JLabel("用户名:");
  lblUserName.setFont(new Font("微软雅黑",Font.PLAIN,14));
  lblUserName.setBounds(60,40,60,15);
   contentPane.add(lblUserName);

   tfUserName =new JTextField();
  tfUserName.setBounds(121,42,242,21);
  contentPane.add(tfUserName);
  tfUserName.setColumns(10);

  btnLink =new JButton("连接服务器");
  btnLink.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
      do_btnlink_actionPerformed(e);
  }
   });
  btnLink.setFont(new Font("微软雅黑",Font.PLAIN,14));
   btnLink.setBounds(140,80,120,23);
   contentPane.add(btnLink);//显示连接服务器窗口
 }
public static void main(String[] args){
     LinkServerFrame linkServerFrame = new LinkServerFrame();
     linkServerFrame.setVisible(true);
}
  protected void do_btnlink_actionPerformed(ActionEvent e) {
      if(!tfIP.getText().equals("")&&!tfUserName.getText().equals("")) {//文本框的内容不能为空
          dispose();//销毁当前窗口
         ClientFrame clientFrame=new ClientFrame(tfIP.getText().trim(), tfUserName.getText().trim());
          clientFrame.setVisible(true);//显示客户窗体
      }
      else {
          JOptionPane.showMessageDialog(null,"文本框里的内容不能为空!","警告",JOptionPane.WARNING_MESSAGE);
      }
       }
}

服务器端代码

Server.java

package servlet;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashSet;
import java.io.BufferedWriter;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Server {
   private HashSet<Socket> allSocket;
   private ServerSocket server;


 public Server() {
     try {
        server = new ServerSocket(8080);
  }catch(IOException e) {

      e.printStackTrace();
  }
     allSocket=new HashSet<Socket>();
 } 
 public void startServer() throws IOException{
     while(true) {
         Socket socket =server.accept();
         System.out.println("用户已经进入聊天室");
         allSocket.add(socket);
         ServerThread t= new ServerThread(socket);
         t.start();
        
     }
 }
 private class ServerThread extends Thread{
       Socket socket;
     public ServerThread(Socket socket) {
       this.socket=socket;
     }
    public void run() {
         BufferedReader br=null;
         try {
            br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            while(true) {
                String str=br.readLine();
                if(str.contains("%EXIT%")) {
                  String tmp=str.split(":")[1]+"用户退出聊天室";
                 sendMessageToALLClient(tmp);
                 allSocket.remove(socket);
                 socket.close();
                 return;    
                }
                sendMessageToALLClient(str);
            }
         }catch(IOException e) {
                e.printStackTrace();
            
         }
     }}
    private void sendMessageToALLClient(String str) throws IOException {
    for(Socket s: allSocket) {
        try{
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        bw.write(str);
        bw.newLine();
        bw.flush();
    }catch(IOException e) {
        e.printStackTrace();
            
         }
    }
 }
 public static void main(String[] args) {
     Server s = new Server();
     try {
         s.startServer();
     }catch(IOException e){
         e.printStackTrace();
     }
     }
 }

操作步骤

1.先运行服务器端代码(server.java)建立连接,然后运行客户端(LinkServerFrame.java)输入用户名

2.登入成功之后会显示用户已经进入聊天室

3.进入多人聊天室

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: java实现多人聊天系统

本文链接: https://www.lsjlt.com/news/167678.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java实现多人聊天系统
    本文实例为大家分享了java实现多人聊天系统的具体代码,供大家参考,具体内容如下 开发环境 Windows 7 操作系统MyEclipse 聊天室程序结构设计 1.系统分为客户端、服...
    99+
    2022-11-13
  • Java Socket实现多人聊天系统
    本文实例为大家分享了Java Socket实现多人聊天系统的具体代码,供大家参考,具体内容如下 前言 GitHub地址 开发环境:Eclipse Java 2019-06 注意:本项...
    99+
    2022-11-12
  • [Unity3D]多人聊天系统
    又再一次修改unity web聊天的功能,之前的两次尝试都觉得服务器端性能太差了,写的还不够成熟,在龙哥的指导下,尝试使用IOCP重新写服务器端,使用线程池大大提高了socket处理性能,相比较之前多线程多个socket一一对应,是在只能是...
    99+
    2023-01-31
    系统 Unity3D
  • Java NIO实现多人聊天室
    本文实例为大家分享了Java NIO实现多人聊天室的具体代码,供大家参考,具体内容如下 1. 服务器端代码 ChatServer类: package nio.test.serve...
    99+
    2022-11-12
  • Java编写实现多人聊天室
    本文实例为大家分享了Java实现多人聊天室的具体代码,供大家参考,具体内容如下 1.客户端 package tk.javazhangwei.net.tcp.chat.Demo03; ...
    99+
    2022-11-13
  • java实现多人聊天对话室
    使用ServerSocket和Socket实现服务器端和客户端的Socket通信。 了解完socket通信步骤后可以发现本实验需要写两个类:Server和Client,并且要先运行...
    99+
    2022-11-12
  • java实现多人聊天室可视化
    编写一个 Java 应用程序,实现图形界面多人聊天室(多线程实现),要求聊天室窗口标题是 “欢迎使用 XXX 聊天室应用”,其中 XXX 是自己的班级姓名学号...
    99+
    2022-11-13
  • Java基于Socket实现多人聊天室
    本文实例为大家分享了Java基于Socket实现简易版多人聊天室的具体代码,供大家参考,具体内容如下 一、 聊天室需求 1、一个服务端,多个客户端;2、实现客户端和服务端的交互;3、...
    99+
    2022-11-13
  • Java实现多人聊天室(含界面)
    本文实例为大家分享了Java实现多人聊天室的具体代码,供大家参考,具体内容如下 先说,记录本人的学习过程,当笔记了 多人聊天室分为 1.服务器 ①.while循环 (guanbo) ...
    99+
    2022-11-13
  • C++实现多人聊天室
    本文实例为大家分享了C++实现多人聊天室的具体代码,供大家参考,具体内容如下 UDP 服务端代码: // Test_Console.cpp : 定义控制台应用程序的入口点。 //...
    99+
    2022-11-12
  • Java多线程实现多人聊天室功能
    本文为大家分享了Java多线程实现多人聊天室功能的具体代码,供大家参考,具体内容如下 1.实验目的: 编写一个 Java 应用程序,实现图形界面多人聊天室(多线程实现),要求聊天室窗...
    99+
    2022-11-12
  • java实现多人聊天工具(socket+多线程)
    大一下学期的java期末课程设计:java实现多人聊天工具,分享一下 课设要求 多人聊天工具 服务器要求1:能够看到所有在线用户(25%) 服务器要求2:能够强制用...
    99+
    2022-11-12
  • Java NIO实现聊天系统
    使用Java的NIO写的一个小的聊天系统,供大家参考,具体内容如下 一、服务端 public class GroupChatServer { // 定义相关的属性 ...
    99+
    2022-11-12
  • java使用UDP实现多人聊天功能
    使用UDP实现简单聊天功能,供大家参考,具体内容如下 使用UDP实现一个简单的多人聊天功能。该程序使用了多线程,实现了聊天功能。 package 课后作业.E103_10_聊天; ...
    99+
    2022-11-13
  • java怎么实现多人聊天对话室
    这篇文章给大家分享的是有关java怎么实现多人聊天对话室的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用ServerSocket和Socket实现服务器端和客户端的Socket通信。了解完socket通信步骤后...
    99+
    2023-06-20
  • Java实现聊天机器人
    本文实例为大家分享了Java实现聊天机器人的具体代码,供大家参考,具体内容如下 服务器的代码: package Day02; import java.io.*; import j...
    99+
    2022-11-12
  • Java NIO实战之多人聊天室
    本文实例为大家分享了Java NIO实战之多人聊天室的具体代码,供大家参考,具体内容如下 NIO服务端 public class NioServer { pu...
    99+
    2022-11-12
  • Java Socket+多线程实现多人聊天室功能
    本文实例为大家分享了Java Socket+多线程实现多人聊天室的具体代码,供大家参考,具体内容如下 思路简介 分为客户端和服务器两个类,所有的客户端将聊的内容发送给服务器,服务器接...
    99+
    2022-11-12
  • javaGUI实现多人聊天功能
    本文实例为大家分享了javaGUI实现多人聊天的具体代码,供大家参考,具体内容如下 服务器 package com.ff.chat.chatserver.frame; import...
    99+
    2022-11-13
  • java实现在线聊天系统
    本文实例为大家分享了java实现在线聊天系统的具体代码,供大家参考,具体内容如下 本博客是博主在观看相关视频后写下的代码,希望能够帮助大家掌握java socket的相关知识。 原理...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作