首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java 之网络编程小案例

Java 之网络编程小案例

作者头像
艾伦耶格尔
发布2025-08-28 14:11:09
发布2025-08-28 14:11:09
12500
代码可运行
举报
文章被收录于专栏:Java基础Java基础
运行总次数:0
代码可运行
1. 多发多收

描述: 编写一个简单的聊天程序,客户端可以向服务器发送多条消息,服务器可以接收所有消息并回复。

代码示例:

服务器端 (Server.java):

代码语言:javascript
代码运行次数:0
运行
复制
import java.io.*;
import java.net.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Server {
    public static void main(String[] args) throws IOException {
        // 创建 ServerSocket 对象,监听指定端口
        ServerSocket serverSocket = new ServerSocket(8080);
        System.out.println("服务器启动,监听端口 8080");

        // 创建线程池,处理多个客户端连接
        ExecutorService executor = Executors.newFixedThreadPool(10);

        while (true) {
            // 阻塞等待客户端连接
            Socket socket = serverSocket.accept();
            System.out.println("客户端连接成功: " + socket.getInetAddress().getHostAddress());

            // 创建线程处理客户端连接
            executor.execute(new ClientHandler(socket));
        }
    }

    // 处理客户端连接的线程类
    static class ClientHandler implements Runnable {
        private Socket socket;

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

        @Override
        public void run() {
            try (BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                 PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {
                String message;
                while ((message = in.readLine()) != null) {
                    System.out.println("收到客户端消息: " + message);
                    out.println("服务器回复: " + message);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

客户端 (Client.java):

代码语言:javascript
代码运行次数:0
运行
复制
import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) throws IOException {
        // 创建 Socket 对象,连接服务器
        Socket socket = new Socket("127.0.0.1", 8080);

        // 获取输入流和输出流
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

        // 发送多条消息
        for (int i = 1; i <= 5; i++) {
            out.println("客户端消息 " + i);
            System.out.println("发送消息: " + "客户端消息 " + i);

            // 接收服务器回复
            String response = in.readLine();
            System.out.println("接收回复: " + response);
        }

        // 关闭连接
        socket.close();
    }
}

运行步骤:

  1. 运行 Server.java,启动服务器。
  2. 运行 Client.java,启动客户端。
  3. 客户端会发送 5 条消息,服务器会逐条接收并回复。
2. 接收并回复

描述: 编写一个程序,服务器接收客户端发送的字符串,并将其反转后回复给客户端。

代码示例:

服务器端 (Server.java):

代码语言:javascript
代码运行次数:0
运行
复制
import java.io.*;
import java.net.*;

public class Server {
    public static void main(String[] args) throws IOException {
        // 创建 ServerSocket 对象,监听指定端口
        ServerSocket serverSocket = new ServerSocket(8080);
        System.out.println("服务器启动,监听端口 8080");

        while (true) {
            // 阻塞等待客户端连接
            Socket socket = serverSocket.accept();
            System.out.println("客户端连接成功: " + socket.getInetAddress().getHostAddress());

            // 获取输入流和输出流
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

            // 接收客户端发送的消息
            String message = in.readLine();
            System.out.println("收到客户端消息: " + message);

            // 反转消息
            String reversedMessage = new StringBuilder(message).reverse().toString();

            // 将反转后的消息发送回客户端
            out.println(reversedMessage);
            System.out.println("发送回复: " + reversedMessage);

            // 关闭连接
            socket.close();
        }
    }
}

客户端 (Client.java):

代码语言:javascript
代码运行次数:0
运行
复制
import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) throws IOException {
        // 创建 Socket 对象,连接服务器
        Socket socket = new Socket("127.0.0.1", 8080);

        // 获取输入流和输出流
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

        // 发送消息
        out.println("hello world");
        System.out.println("发送消息: hello world");

        // 接收服务器回复
        String response = in.readLine();
        System.out.println("接收回复: " + response);

        // 关闭连接
        socket.close();
    }
}

运行步骤:

  1. 运行 Server.java,启动服务器。
  2. 运行 Client.java,启动客户端。
  3. 客户端会发送 "hello world",服务器会将它反转为 "dlrow olleh" 并回复给客户端。
3. 上传文件

描述: 编写一个程序,客户端上传文件到服务器,服务器保存文件到指定目录。

代码示例:

服务器端 (Server.java):

代码语言:javascript
代码运行次数:0
运行
复制
import java.io.*;
import java.net.*;

public class Server {
    public static void main(String[] args) throws IOException {
        // 创建 ServerSocket 对象,监听指定端口
        ServerSocket serverSocket = new ServerSocket(8080);
        System.out.println("服务器启动,监听端口 8080");

        while (true) {
            // 阻塞等待客户端连接
            Socket socket = serverSocket.accept();
            System.out.println("客户端连接成功: " + socket.getInetAddress().getHostAddress());

            // 获取输入流和输出流
            InputStream in = socket.getInputStream();
            OutputStream out = socket.getOutputStream();

            // 接收文件名
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            String fileName = reader.readLine();
            System.out.println("接收文件名: " + fileName);

            // 创建文件输出流
            File file = new File("upload/" + fileName); // 文件保存到 upload 目录
            FileOutputStream fileOutputStream = new FileOutputStream(file);

            // 接收文件内容
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = in.read(buffer)) != -1) {
                fileOutputStream.write(buffer, 0, bytesRead);
            }

            // 发送成功信息
            out.write("文件上传成功".getBytes());
            System.out.println("文件上传成功: " + fileName);

            // 关闭流和连接
            fileOutputStream.close();
            in.close();
            out.close();
            socket.close();
        }
    }
}

客户端 (Client.java):

代码语言:javascript
代码运行次数:0
运行
复制
import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) throws IOException {
        // 创建 Socket 对象,连接服务器
        Socket socket = new Socket("127.0.0.1", 8080);

        // 获取输入流和输出流
        InputStream in = socket.getInputStream();
        OutputStream out = socket.getOutputStream();

        // 上传文件
        File file = new File("test.txt"); // 上传 test.txt 文件
        String fileName = file.getName();

        // 发送文件名
        PrintWriter writer = new PrintWriter(out, true);
        writer.println(fileName);

        // 发送文件内容
        FileInputStream fileInputStream = new FileInputStream(file);
        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = fileInputStream.read(buffer)) != -1) {
            out.write(buffer, 0, bytesRead);
        }

        // 接收服务器回复
        byte[] response = new byte[1024];
        in.read(response);
        System.out.println("服务器回复: " + new String(response));

        // 关闭流和连接
        fileInputStream.close();
        in.close();
        out.close();
        socket.close();
    }
}

运行步骤:

  1. 确保服务器程序中创建了名为 "upload" 的目录。
  2. 运行 Server.java,启动服务器。
  3. 运行 Client.java,启动客户端。
  4. 客户端会将 "test.txt" 文件上传到服务器,服务器会将文件保存到 "upload" 目录下。

注意:

  • 以上案例仅为简单的示例,实际应用中还需要考虑更多细节,例如错误处理、线程安全等。
  • 可以根据自己的需求进行修改和扩展,例如增加文件大小限制、添加进度条等功能。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 多发多收
  • 2. 接收并回复
  • 3. 上传文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档