热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

java编程实现多人聊天室功能

这篇文章主要为大家详细介绍了java编程实现多人聊天室功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

程序源代码及运行截图:

server.java

//server.java
package Socket;
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.ArrayList;
import java.util.List;
import java.util.Scanner;
public class server implements Runnable {// 服务端
  static List socketList=new ArrayList();
// 读取 In
  static Socket socket = null;
  static ServerSocket serverSocket = null;
  public server() {// 构造方法
    try {
      serverSocket = new ServerSocket(9999);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("************服务端*************");
    server t = new server();
    int count = 0;
    while (true) {     
      try {
//       System.out.println("端口9999等待被连接......");
        socket = serverSocket.accept();
        count++;
        System.out.println("第" + count + "个客户已连接");
        socketList.add(socket);
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      Print p = new Print(socket);
      Thread read = new Thread(t);
      Thread print = new Thread(p);
      read.start();
      print.start();
    }
  }
  @Override
  public void run() {
    // 重写run方法
    try {
      Thread.sleep(1000);
      BufferedReader in = new BufferedReader(new InputStreamReader(socket
          .getInputStream()));
      while (true) {
        String jieshou = in.readLine();
        System.out.println( jieshou);
        for (int i = 0; i  socketList=new ArrayList();
  Scanner input = new Scanner(System.in);
  public Print(Socket s) {// 构造方法
    try {
      socketList.add(s);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  @Override
  public void run() {
    try {
      Thread.sleep(1000);
      while (true) {
        String msg = input.next();
      for (int i = 0; i 

client.java

//client.java
package Socket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class client implements Runnable {// 客户端
  static Socket socket = null;
  Scanner input = new Scanner(System.in);
  static String name=null;
  public static void main(String[] args) {
    int x=(int)(Math.random()*100);
    client.name="client"+x;
    System.out.println("************客户端"+x+"*************");
    try {
      socket = new Socket("127.0.0.1", 9999);
      System.out.println("已经连上服务器了");
    } catch (Exception e) {
      e.printStackTrace();
    }
    client t = new client();
    Read r = new Read(socket);
    Thread print = new Thread(t);
    Thread read = new Thread(r);
    print.start();
    read.start();
  }
  @Override
  public void run() {
    try {
      Thread.sleep(1000);     
      PrintWriter out = new PrintWriter(socket.getOutputStream());
      while (true) {
        String msg = input.next();
        out.println(name+"说:"+msg);
        out.flush();
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
class Read implements Runnable {
  static Socket socket = null;
  public Read(Socket socket) {
    this.socket = socket;
  }
  @Override
  public void run() {
    try {
      Thread.sleep(1000);
      BufferedReader in = new BufferedReader(new InputStreamReader(socket
          .getInputStream()));
      while (true) {
        System.out.println( in.readLine());
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

测试数据一:

服务端程序运行截图:

客户端1程序运行截图:

 

客户端2程序运行截图:

 

由测试数据一可以看出:程序可以实现多人聊天,并且效果和性能还算可以。而且每个客户端连接进服务器时,都会随机产生一个随机数作为自身的标志,避免通话过程中,分辨不清彼此,而导致交流效果不好。

测试数据二:

服务端运行截图:

 

 

客户端1程序运行截图:

客户端2程序运行截图:

客户端3程序运行截图:

客户端4程序运行截图:

客户端5程序运行截图:

客户端6程序运行截图:

客户端7程序运行截图:

 客户端8程序运行截图:

客户端9程序运行截图:

客户端10程序运行截图:

测试二一共连入了10个客户端进行程序稳定性的测试,程序运行结果稳定,符合实验预期结果,充分说明了程序的鲁棒性较强。

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


推荐阅读
  • 本文详细解析 Skynet 的启动流程,包括配置文件的读取、环境变量的设置、主要线程的启动(如 timer、socket、monitor 和 worker 线程),以及消息队列的实现机制。 ... [详细]
  • 本文详细介绍了如何使用 Python 编程语言中的 Scapy 库执行 DNS 欺骗攻击,包括必要的软件安装、攻击流程及代码示例。 ... [详细]
  • System Center Operations Manager 2007(简称SCOM 2007)作为MOM 2005的升级版,不仅整合了监控与管理功能,还显著简化了操作流程,提供了更加全面和精准的服务管理。 ... [详细]
  • 利用Cookie实现用户登录状态的持久化
    本文探讨了如何使用Cookie技术在Web应用中实现用户登录状态的持久化,包括Cookie的基本概念、优势及主要操作方法,并通过一个简单的Java Web项目示例展示了具体实现过程。 ... [详细]
  • 本文探讨了在SharePoint环境中使用BDC(Business Data Catalog)时遇到的问题及其解决策略,包括XML文件导入SSP后的不可见性问题以及与远程SQL Server 2005连接的难题。 ... [详细]
  • 本文详细介绍了跨站脚本攻击(XSS)的基本概念、工作原理,并通过实际案例演示如何构建XSS漏洞的测试环境,以及探讨了XSS攻击的不同形式和防御策略。 ... [详细]
  • 探索OpenWrt中的LuCI框架
    本文深入探讨了OpenWrt系统中轻量级HTTP服务器uhttpd的工作原理及其配置,重点介绍了LuCI界面的实现机制。 ... [详细]
  • Hadoop集群搭建:实现SSH无密码登录
    本文介绍了如何在CentOS 7 64位操作系统环境下配置Hadoop集群中的SSH无密码登录,包括环境准备、用户创建、密钥生成及配置等步骤。 ... [详细]
  • Git版本控制基础解析
    本文探讨了Git作为版本控制工具的基本概念及其重要性,不仅限于代码管理,还包括文件的历史记录与版本切换功能。通过对比Git与SVN,进一步阐述了分布式版本控制系统的独特优势。 ... [详细]
  • 本文探讨了在不同场景下如何高效且安全地存储Token,包括使用定时器刷新、数据库存储等方法,并针对个人开发者与第三方服务平台的不同需求提供了具体建议。 ... [详细]
  • LoadRunner中的IP欺骗配置与实践
    为了确保服务器能够有效地区分不同的用户请求,避免多人使用同一IP地址造成的访问限制,可以通过配置IP欺骗来解决这一问题。本文将详细介绍IP欺骗的工作原理及其在LoadRunner中的具体配置步骤。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文探讨了一个Web工程项目的需求,即允许用户随时添加定时任务,并通过Quartz框架实现这些任务的自动化调度。文章将介绍如何设计任务表以存储任务信息和执行周期,以及如何通过一个定期扫描机制自动识别并加载新任务到调度系统中。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统上安装中文宋体字体的方法,包括操作系统的环境配置、字体管理工具的安装、字体文件的传输与缓存重建等步骤。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
author-avatar
书友73428983
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有