温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用Java Socket套接字发送文件

发布时间:2025-07-07 12:47:24 来源:亿速云 阅读:100 作者:小樊 栏目:编程语言

要使用Java Socket套接字发送文件,您需要创建一个客户端和一个服务器端

步骤1:创建服务器端

首先,创建一个名为FileServer.java的文件,并编写以下代码:

import java.io.*;
import java.net.*;

public class FileServer {
    public static void main(String[] args) {
        int port = 9999; // 设置监听端口
        try (ServerSocket serverSocket = new ServerSocket(port)) {
            System.out.println("等待客户端连接...");

            Socket socket = serverSocket.accept();
            System.out.println("客户端已连接");

            InputStream inputStream = socket.getInputStream();
            DataInputStream dataInputStream = new DataInputStream(inputStream);

            String fileName = dataInputStream.readUTF(); // 读取文件名
            long fileSize = dataInputStream.readLong(); // 读取文件大小

            System.out.println("接收文件: " + fileName + ", 大小: " + fileSize);

            FileOutputStream fileOutputStream = new FileOutputStream(fileName);
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);

            byte[] buffer = new byte[4096];
            int bytesRead;
            long totalBytesRead = 0;

            while (totalBytesRead < fileSize && (bytesRead = dataInputStream.read(buffer, 0, (int) Math.min(buffer.length, fileSize - totalBytesRead))) != -1) {
                bufferedOutputStream.write(buffer, 0, bytesRead);
                totalBytesRead += bytesRead;
            }

            bufferedOutputStream.close();
            fileOutputStream.close();

            System.out.println("文件接收完成");

            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

步骤2:创建客户端

接下来,创建一个名为FileClient.java的文件,并编写以下代码:

import java.io.*;
import java.net.*;

public class FileClient {
    public static void main(String[] args) {
        String serverAddress = "localhost"; // 服务器地址
        int serverPort = 9999; // 服务器端口
        String filePath = "example.txt"; // 要发送的文件路径

        try (Socket socket = new Socket(serverAddress, serverPort)) {
            OutputStream outputStream = socket.getOutputStream();
            DataOutputStream dataOutputStream = new DataOutputStream(outputStream);

            File file = new File(filePath);
            String fileName = file.getName();
            long fileSize = file.length();

            dataOutputStream.writeUTF(fileName); // 发送文件名
            dataOutputStream.writeLong(fileSize); // 发送文件大小

            FileInputStream fileInputStream = new FileInputStream(file);
            BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);

            byte[] buffer = new byte[4096];
            int bytesRead;

            while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {
                dataOutputStream.write(buffer, 0, bytesRead);
            }

            bufferedInputStream.close();
            fileInputStream.close();

            System.out.println("文件发送完成");

            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

步骤3:运行程序

首先运行FileServer.java,然后运行FileClient.java。确保在运行客户端之前,服务器端已经在监听端口上运行。

这将使客户端将名为example.txt的文件发送到服务器端。服务器端将接收文件并将其保存在当前目录下。

注意:这个示例仅适用于发送较小的文件。对于大型文件,您可能需要考虑使用更高级的技术,如分块传输和进度报告。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手