Java网络编程Demo,使用TCP 实现简单群聊功能Groupchat,创建一个服务端,使多个客户端都能收到消息

简介: Java网络编程Demo,使用TCP 实现简单群聊功能Groupchat,创建一个服务端,使多个客户端都能收到消息

效果图:


开启服务端

54.png


客户端一


55.png


客户端二


56.png


客户端三


57.png


实现代码:


客户端类

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class SocketServer {
  public static List<Socket> socketList=new ArrayList<Socket>(); 
  public static void main(String[] args) throws IOException {
    ServerSocket serverSocket = new ServerSocket(8088);
    System.out.println("聊天服务已开启");
    while(true){
      //当客户端发出请求,服务端建立的通向客户端的专属通道
      Socket socket = serverSocket.accept();
      socketList.add(socket);
      new Thread(new ServerThread(socket)).start();
    }
  }
}


服务器线程类


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class ServerThread implements Runnable{
  public Socket socket;
  public ServerThread(Socket socket) {
    super();
    this.socket = socket;
  }
  @Override
  public void run() {
    try {
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
      while (true) {
        String readLine = bufferedReader.readLine();
        for (Socket item : SocketServer.socketList) {
          PrintWriter pw=new PrintWriter(item.getOutputStream());
          pw.println("用户"+socket.getPort()+"说"+readLine);
          pw.flush();
        }
      }
    } catch (Exception e) {
    }
  }
}


读取的线程类


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class ReaderThread implements Runnable{
  public Socket socket;
  public ReaderThread(Socket socket) {
    super();
    this.socket = socket;
  }
  @Override
  public void run() {
    try {
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
      while (true) {
        String data=bufferedReader.readLine();
        System.out.println(data);
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}


写出的线程类

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class WriterThread implements Runnable{
  public Socket socket;
  public WriterThread(Socket socket) {
    super();
    this.socket = socket;
  }
  @Override
  public void run() {
    try {
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
      while (true) {
        String data=br.readLine();
        printWriter.println(data);
        printWriter.flush();
      }
    } catch (Exception e) {
    }
  }
}



客户端类


import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketClient {
  public static void main(String[] args) throws UnknownHostException, IOException {
    Socket socket = new Socket("127.0.0.1",8088);
    System.out.println("您已上线");
    new Thread(new WriterThread(socket)).start();
    new Thread(new ReaderThread(socket)).start();
  }
}



相关文章
|
8天前
|
消息中间件 Java Linux
2024年最全BATJ真题突击:Java基础+JVM+分布式高并发+网络编程+Linux(1),2024年最新意外的惊喜
2024年最全BATJ真题突击:Java基础+JVM+分布式高并发+网络编程+Linux(1),2024年最新意外的惊喜
|
14天前
|
网络协议 算法 Java
【Java网络编程】网络编程概述、UDP通信(DatagramPacket 与 DatagramSocket)
【Java网络编程】网络编程概述、UDP通信(DatagramPacket 与 DatagramSocket)
28 3
|
2天前
|
存储 安全 Java
Java中的异常处理:从基础到高级网络安全与信息安全:防范漏洞与强化意识
【5月更文挑战第27天】本文主要探讨了Java中的异常处理机制,从基础的try-catch-finally结构,到高级的自定义异常和异常链。我们将深入理解异常的概念,学习如何有效地处理异常,以及如何使用异常来提高代码的可读性和可维护性。 【5月更文挑战第27天】随着信息技术的迅猛发展,网络已成为社会运行的重要基础。然而,伴随而来的网络安全威胁也日益增多,尤其是安全漏洞的出现和利用,严重威胁着个人、企业乃至国家的信息资产安全。本文旨在分享关于网络安全漏洞的识别与防护方法、加密技术的应用以及提升个人和企业的安全意识等方面的关键知识,以帮助读者构建更为坚固的网络安全防线。
|
4天前
|
网络协议 Java API
Java 网络编程
5月更文挑战第19天
|
11天前
|
前端开发 JavaScript Java
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)五(前端页面
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)五(前端页面
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)五(前端页面
|
14天前
|
Java 开发者 Spring
Java一分钟之-Java网络编程基础:Socket通信
【5月更文挑战第13天】本文介绍了Java Socket编程基础知识,包括使用`ServerSocket`和`Socket`类建立连接,通过`OutputStream`和`InputStream`进行数据传输。常见问题涉及忘记关闭Socket导致的资源泄漏、网络异常处理及并发同步。理解Socket通信原理并掌握异常处理、资源管理和并发控制,能帮助开发者构建更稳定的网络应用。
39 1
|
14天前
|
网络协议 Dubbo Java
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
15 0
|
14天前
|
安全 Java 网络安全
深入理解Java异常处理网络安全与信息安全:保护数据的关键策略
【4月更文挑战第29天】本文将深入探讨Java中的异常处理机制,包括异常的概念、分类、捕获和处理等方面。通过详细的解析和实例演示,帮助读者更好地理解Java异常处理的原理和应用。 【4月更文挑战第29天】在数字化时代,数据成为最宝贵的资产之一。随着网络攻击的日益猖獗,了解并实施有效的网络安全和信息保护措施变得至关重要。本文将深入探讨网络安全漏洞的概念、加密技术的重要性以及提升个人和企业的安全意识的必要性。我们将分析当前的安全挑战,并提供一系列实用的防护策略,旨在帮助读者构建一个更加安全的数字环境。
|
14天前
|
网络协议 Java 网络架构
Java基础教程(18)-Java中的网络编程
【4月更文挑战第18天】Java网络编程简化了底层协议处理,利用Java标准库接口进行TCP/IP通信。TCP协议提供可靠传输,常用于HTTP、SMTP等协议;UDP协议则更高效但不保证可靠性。在TCP编程中,ServerSocket用于监听客户端连接,Socket实现双进程间通信。UDP编程中,DatagramSocket处理无连接的数据报文。HTTP编程可以通过HttpURLConnection发送请求并接收响应。
|
14天前
|
监控 网络协议 Java
《Java 简易速速上手小册》第7章:Java 网络编程(2024 最新版)
《Java 简易速速上手小册》第7章:Java 网络编程(2024 最新版)
25 0
《Java 简易速速上手小册》第7章:Java 网络编程(2024 最新版)