局域网聊天软件 Java

介绍

局域网聊天软件是一种可以在局域网内部进行通信的应用程序。Java 是一种面向对象的编程语言,具有跨平台特性,因此非常适合开发网络应用程序。本文将介绍如何使用 Java 编程语言开发一个简单的局域网聊天软件。

准备工作

在开始之前,我们需要安装 JDK(Java Development Kit)并配置好 Java 开发环境。可以从 Oracle 官方网站下载最新版本的 JDK,并按照官方文档进行安装和配置。

实现思路

我们需要实现以下功能:

  1. 创建一个服务器,用于监听客户端的连接请求。
  2. 创建多个客户端,用于与服务器进行通信。
  3. 客户端之间可以互相发送消息。

创建服务器

我们首先创建一个服务器,用于监听客户端的连接请求。服务器需要绑定一个端口,并在该端口上监听客户端的连接请求。

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    private ServerSocket serverSocket;

    public Server(int port) throws IOException {
        serverSocket = new ServerSocket(port);
    }

    public void start() {
        try {
            while (true) {
                Socket clientSocket = serverSocket.accept();
                // 创建一个新的线程处理客户端的连接
                Thread thread = new Thread(new ClientHandler(clientSocket));
                thread.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try {
            Server server = new Server(8000);
            server.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

创建客户端

我们创建一个客户端类,用于与服务器进行通信。客户端需要连接服务器,并可以发送和接收消息。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class Client {
    private Socket socket;
    private BufferedReader inputReader;
    private PrintWriter outputWriter;

    public Client(String serverAddress, int serverPort) throws IOException {
        socket = new Socket(serverAddress, serverPort);
        inputReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        outputWriter = new PrintWriter(socket.getOutputStream(), true);
    }

    public void sendMessage(String message) {
        outputWriter.println(message);
    }

    public String receiveMessage() throws IOException {
        return inputReader.readLine();
    }

    public void close() throws IOException {
        inputReader.close();
        outputWriter.close();
        socket.close();
    }

    public static void main(String[] args) {
        try {
            Client client = new Client("localhost", 8000);
            client.sendMessage("Hello, server!");
            String response = client.receiveMessage();
            System.out.println("Server response: " + response);
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

实现消息广播

我们可以使用线程池来实现消息广播功能。服务器接收到消息后,将消息发送给所有连接到服务器的客户端。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class ClientHandler implements Runnable {
    private Socket clientSocket;
    private BufferedReader inputReader;
    private PrintWriter outputWriter;

    public ClientHandler(Socket clientSocket) throws IOException {
        this.clientSocket = clientSocket;
        inputReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        outputWriter = new PrintWriter(clientSocket.getOutputStream(), true);
    }

    @Override
    public void run() {
        try {
            String message;
            while ((message = inputReader.readLine()) != null) {
                // 将收到的消息发送给所有客户端
                Server.broadcastMessage(message);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                inputReader.close();
                outputWriter.close();
                clientSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public void sendMessage(String message) {
        outputWriter.println(message);
    }
}

测试

我们可以运行服务器和多个客户端进行测试。在不同的客户端上发送消息,服务器会将消息广播给所有连接的客户端。

import java.io.IOException;

public class Test {
    public static void main(String[] args) {
        try {
            Server server = new Server(8000);
            server.start();

            Client client1 = new Client("localhost", 8000);
            client1.sendMessage("Hello, server!");

            Client client2 = new Client("localhost", 8000);