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();
  }
}



相关文章
|
11天前
|
负载均衡 网络协议 算法
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
这网络层就像搭积木一样,上层协议都是基于下层协议搭出来的。不管是ping(用了ICMP协议)还是tcp本质上都是基于网络层IP协议的数据包,而到了物理层,都是二进制01串,都走网卡发出去了。 如果网络环境没发生变化,目的地又一样,那按道理说他们走的网络路径应该是一样的,什么情况下会不同呢? 我们就从路由这个话题聊起吧。
42 4
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
|
7天前
|
网络协议
TCP报文格式全解析:网络小白变高手的必读指南
本文深入解析TCP报文格式,涵盖源端口、目的端口、序号、确认序号、首部长度、标志字段、窗口大小、检验和、紧急指针及选项字段。每个字段的作用和意义详尽说明,帮助理解TCP协议如何确保可靠的数据传输,是互联网通信的基石。通过学习这些内容,读者可以更好地掌握TCP的工作原理及其在网络中的应用。
|
1月前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
60 3
|
2月前
|
Web App开发 缓存 网络协议
不为人知的网络编程(十八):UDP比TCP高效?还真不一定!
熟悉网络编程的(尤其搞实时音视频聊天技术的)同学们都有个约定俗成的主观论调,一提起UDP和TCP,马上想到的是UDP没有TCP可靠,但UDP肯定比TCP高效。说到UDP比TCP高效,理由是什么呢?事实真是这样吗?跟着本文咱们一探究竟!
76 10
|
1月前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
2月前
|
域名解析 缓存 网络协议
TCP传输层详解(计算机网络复习)
本文详细解释了TCP/IP协议族的分层模型、各层的功能、TCP报文的格式以及TCP连接建立的三次握手和断开的四次挥手过程。
1032 2
TCP传输层详解(计算机网络复习)
|
2月前
|
域名解析 存储 网络协议
TCP套接字【网络】
TCP套接字【网络】
47 10
|
2月前
|
网络协议 Java API
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
73 2
|
2月前
|
存储 网络协议 Java
【网络】UDP和TCP之间的差别和回显服务器
【网络】UDP和TCP之间的差别和回显服务器
78 1
|
2月前
|
XML 网络协议 算法
【TCP】网络原理
【TCP】网络原理
39 0

热门文章

最新文章