由于文件传送器可以有很多种实现方式,我在这里提供一种基于Socket的简单实现方式。

首先创建一个服务器端,代码如下:

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

public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8888);
            System.out.println("Server started");

            while (true) {
                Socket clientSocket = serverSocket.accept();
                System.out.println("Client connected: " + clientSocket.getInetAddress().getHostAddress());

                DataInputStream dis = new DataInputStream(clientSocket.getInputStream());
                String fileName = dis.readUTF();
                System.out.println("Receiving file: " + fileName);

                FileOutputStream fos = new FileOutputStream(fileName);
                byte[] buffer = new byte[4096];
                int read = 0;
                while ((read = dis.read(buffer)) != -1) {
                    fos.write(buffer, 0, read);
                }

                fos.close();
                dis.close();
                clientSocket.close();

                System.out.println("File received: " + fileName);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这个服务器端监听端口号为8888,一旦有客户端连接,就会接收客户端发送的文件并保存在本地。

接下来创建一个客户端,代码如下:

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

public class Client {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 8888);
            System.out.println("Connected to server");

            File file = new File("test.txt");
            FileInputStream fis = new FileInputStream(file);
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
            dos.writeUTF(file.getName());

            byte[] buffer = new byte[4096];
            int read = 0;
            while ((read = fis.read(buffer)) != -1) {
                dos.write(buffer, 0, read);
            }

            fis.close();
            dos.close();
            socket.close();

            System.out.println("File sent: " + file.getName());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这个客户端连接到服务器端的8888端口,将本地的test.txt文件发送到服务器端。

注意在实际运行中,需要先启动服务器端,再启动客户端。另外,这个实现方式还存在很多问题,如没有进行错误处理、没有考虑传输大文件时的性能问题等,仅供参考

用Java写一个文件传送器

原文地址: https://www.cveoy.top/t/topic/fleU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录