返回顶部
首页 > 资讯 > 精选 >怎么用java实现一个简易的聊天室
  • 684
分享到

怎么用java实现一个简易的聊天室

java 2024-02-29 18:02:22 684人浏览 安东尼
摘要

要实现一个简易的聊天室,可以使用Java的Socket编程实现。下面是一个简单的实现示例: 服务器端代码: import java.

要实现一个简易的聊天室,可以使用Java的Socket编程实现。下面是一个简单的实现示例:

服务器端代码:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class ChatServer {
    private ServerSocket serverSocket;
    private List<ClientHandler> clients = new ArrayList<>();

    public static void main(String[] args) {
        ChatServer server = new ChatServer();
        server.start(8888);
    }

    public void start(int port) {
        try {
            serverSocket = new ServerSocket(port);
            System.out.println("服务器已启动,监听端口:" + port);

            while (true) {
                Socket clientSocket = serverSocket.accept();
                System.out.println("客户端已连接:" + clientSocket.getRemoteSocketAddress());

                // 创建一个新的客户端处理器
                ClientHandler clientHandler = new ClientHandler(clientSocket);
                clients.add(clientHandler);
                clientHandler.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public synchronized void broadcast(String message, ClientHandler excludeClient) {
        for (ClientHandler client : clients) {
            if (client != excludeClient) {
                client.sendMessage(message);
            }
        }
    }

    public synchronized void removeClient(ClientHandler client) {
        clients.remove(client);
    }

    private class ClientHandler extends Thread {
        private Socket clientSocket;
        private InputStream inputStream;
        private OutputStream outputStream;

        public ClientHandler(Socket clientSocket) {
            this.clientSocket = clientSocket;
        }

        @Override
        public void run() {
            try {
                inputStream = clientSocket.getInputStream();
                outputStream = clientSocket.getOutputStream();

                byte[] buffer = new byte[1024];
                int bytesRead;
                while ((bytesRead = inputStream.read(buffer)) != -1) {
                    String message = new String(buffer, 0, bytesRead);
                    System.out.println("收到消息:" + message);

                    // 广播消息给其他客户端
                    broadcast(message, this);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    clientSocket.close();
                    removeClient(this);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        public void sendMessage(String message) {
            try {
                outputStream.write(message.getBytes());
                outputStream.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

客户端代码:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class ChatClient {
    private Socket socket;
    private InputStream inputStream;
    private OutputStream outputStream;

    public static void main(String[] args) {
        ChatClient client = new ChatClient();
        client.connect("localhost", 8888);
    }

    public void connect(String serverAddress, int serverPort) {
        try {
            socket = new Socket(serverAddress, serverPort);
            System.out.println("已连接到服务器:" + serverAddress + ":" + serverPort);

            inputStream = socket.getInputStream();
            outputStream = socket.getOutputStream();

            // 接收和发送消息的线程
            Thread receiveThread = new Thread(this::receiveMessages);
            Thread sendThread = new Thread(this::sendMessages);

            receiveThread.start();
            sendThread.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void receiveMessages() {
        try {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                String message = new String(buffer, 0, bytesRead);
                System.out.println(message);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void sendMessages() {
        Scanner scanner = new Scanner(System.in);
        try {
            while (true) {
                String message = scanner.nextLine();
                outputStream.write(message.getBytes());
                outputStream.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在命令行中,先运行服务器端的ChatServer类,再运行客户端的ChatClient类。客户端可以输入消息,然后服务器端会将消息广播给其他客户端。注意要将客户端的connect方法中的serverAddress改为服务器的IP地址。

--结束END--

本文标题: 怎么用java实现一个简易的聊天室

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

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

猜你喜欢
  • 怎么用java实现一个简易的聊天室
    要实现一个简易的聊天室,可以使用Java的Socket编程实现。下面是一个简单的实现示例: 服务器端代码: import java....
    99+
    2024-02-29
    java
  • Java实现一个简易聊天室流程
    目录文件传输Tcp方式Udp 方式简易聊天室的实现接收端发送端启动说到网络,相信大家都对TCP、UDP和HTTP协议这些都不是很陌生,学习这部分应该先对端口、Ip地址这些基础知识有一...
    99+
    2022-11-13
    Java聊天室 Java简易聊天室
  • Java Socket实现简易聊天室
    Java-Socket编程实现简易聊天室(TCP),供大家参考,具体内容如下 实现一个服务器接收多个客户端 测试: 首先启动服务器,然后启动三个客户端,输入三个不同的用户名,分别在聊...
    99+
    2024-04-02
  • Java Socket怎样实现简易聊天室
    这篇文章主要介绍了Java Socket怎样实现简易聊天室,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java-Socket编程实现简易聊天室(TCP),具体内容如下实现一...
    99+
    2023-06-14
  • java+socket实现简易局域网聊天室
    本文实例为大家分享了java+socket实现简易局域网聊天室的具体代码,供大家参考,具体内容如下 服务器端 ServerFrame.java package com.eze.cha...
    99+
    2024-04-02
  • 如何用python实现简易聊天室
    本篇内容主要讲解“如何用python实现简易聊天室”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用python实现简易聊天室”吧!1.功能:类似qq群聊功能有人进入聊天室需要输入姓名,姓名不...
    99+
    2023-06-20
  • C#实现简易多人聊天室
    本文实例为大家分享了C#实现简易多人聊天室的具体代码,供大家参考,具体内容如下 只有一个群聊的功能 服务端 using System; using System.Collectio...
    99+
    2024-04-02
  • Java网络编程之简易聊天室的实现
    目录一、题目描述二、解题思路三、代码详解一、题目描述 题目实现:运行客户端,连接服务器。 二、解题思路 首先需要启动上题的ServerSocketFrame服务,这样客户端运行时,才...
    99+
    2022-11-13
    Java实现简易聊天室 Java 聊天室
  • python实现简易聊天室(Linux终端)
    本文实例为大家分享了python实现简易聊天室的具体代码,供大家参考,具体内容如下 群聊聊天室 1.功能:类似qq群聊功能 有人进入聊天室需要输入姓名,姓名不能重复 有人进入聊天室,其他人会受到通知 xxx进入...
    99+
    2022-06-02
    python 聊天室
  • C++实现简易UDP网络聊天室
    本文实例为大家分享了C++实现简易UDP网络聊天室的具体代码,供大家参考,具体内容如下 工程名:NetSrv NetSrv.cpp //服务器端 #include<Wins...
    99+
    2024-04-02
  • node+socket实现简易聊天室功能
    本文实例为大家分享了node+socket实现简易聊天室的具体代码,供大家参考,具体内容如下 服务端 const net = require('net') const serv...
    99+
    2024-04-02
  • ASP.net(C#)实现简易聊天室功能
    本文实例为大家分享了ASP.net(C#)实现简易聊天室功能的具体代码,供大家参考,具体内容如下 1.搭建框架 <html > <head>     <...
    99+
    2024-04-02
  • C语言实现简易网络聊天室
    本文实例为大家分享了C语言实现网络聊天室的具体代码,供大家参考,具体内容如下 业务逻辑: 1、客户端注册名字 2、告诉所有在线的客户端,XXX进入聊天室 3、新建一个线程为该客户端服...
    99+
    2024-04-02
  • 基于Pythonsocket实现简易网络聊天室
    目录1.socket_ui.py 服务端1-1. 依赖引用1-2. 实现过程1-3. 实现效果2.client_ui.py 客户端2-1. 依赖引用2-2. 实现过程2-3. 实现效...
    99+
    2024-04-02
  • golang实现一个简单的websocket聊天室功能
    基本原理: 1.引入了 golang.org/x/net/websocket 包。 2.监听端口。 3.客户端连接时,发送结构体: {"type":"login","uid":"我是...
    99+
    2024-04-02
  • Go语言怎么实现一个简单的并发聊天室
    今天小编给大家分享一下Go语言怎么实现一个简单的并发聊天室的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。并发聊天服务器这里主...
    99+
    2023-06-29
  • Java实现简单的聊天室功能
    本文实例为大家分享了Java实现简单聊天室功能的具体代码,供大家参考,具体内容如下 一、客户端的创建 1.我们可以用Socket来创建客户端 public class Client...
    99+
    2024-04-02
  • Node.js怎么实现简单聊天室
    这篇“Node.js怎么实现简单聊天室”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Node.js怎么实现简单聊天室”文章吧...
    99+
    2023-07-04
  • Nodejs实现多房间简易聊天室功能
    1、前端界面代码   前端不是重点,够用就行,下面是前端界面,具体代码可到github下载。 2、服务器端搭建   本服务器需要提供两个功能:http服务和websocket服务,由于node的事件驱动机制...
    99+
    2022-06-04
    简易 聊天室 房间
  • 安卓android+WebSocket实现简易QQ聊天室
    本篇仅介绍实现聊天室的前端,也就是安卓端代码,后端的实现看链接说明 链接说明 1.后端使用了spring boot 框架,若不熟悉,有关spri...
    99+
    2022-06-06
    websocket Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作