1. 创建一个ServerSocket对象,指定端口号。
ServerSocket serverSocket = new ServerSocket(8888);
  1. 使用while循环监听客户端的连接请求。
while (true) {
    Socket socket = serverSocket.accept();
    // 处理客户端连接
}
  1. 在客户端连接之后,可以使用socket对象获取输入输出流进行数据传输。
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
  1. 可以使用BufferedReader和PrintWriter等类进行数据读写操作。
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
PrintWriter writer = new PrintWriter(outputStream);
  1. 可以使用File类进行文件操作,读取或者写入文件。
File file = new File("文件路径");
  1. 完成文件传输后,关闭socket和流等资源。
socket.close();
reader.close();
writer.close();

完整代码示例:

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

public class FileServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8888);
        while (true) {
            Socket socket = serverSocket.accept();
            System.out.println("客户端已连接");
            InputStream inputStream = socket.getInputStream();
            OutputStream outputStream = socket.getOutputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            PrintWriter writer = new PrintWriter(outputStream);
            String filePath = reader.readLine();
            System.out.println("文件路径:" + filePath);
            File file = new File(filePath);

            if (!file.exists()) {
                // 文件不存在
                writer.println("File not found");
                writer.flush();
            } else {
                // 文件存在,开始传输
                writer.println("File name: " + file.getName());
                writer.flush();
                FileInputStream fileInputStream = new FileInputStream(file);
                byte[] buffer = new byte[1024];
                int len;
                while ((len = fileInputStream.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, len);
                    outputStream.flush();
                }
                fileInputStream.close();
            }

            socket.close();
            reader.close();
            writer.close();
        }
    }
}

客户端代码示例:

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

public class FileClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 8888);
        InputStream inputStream = socket.getInputStream();
        OutputStream outputStream = socket.getOutputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        PrintWriter writer = new PrintWriter(outputStream);
        String filePath = "文件路径";
        writer.println(filePath);
        writer.flush();
        String response = reader.readLine();
        if (response.startsWith("File not found")) {
            System.out.println("文件不存在");
        } else {
            System.out.println(response);
            FileOutputStream fileOutputStream = new FileOutputStream(new File("文件保存路径"));
            byte[] buffer = new byte[1024];
            int len;
            while ((len = inputStream.read(buffer)) != -1) {
                fileOutputStream.write(buffer, 0, len);
                fileOutputStream.flush();
            }
            fileOutputStream.close();
        }

        socket.close();
        reader.close();
        writer.close();
    }
}
``
用java在Windows环境下建立一个文件服务器使用TCP的方式由客户机连接到服务器

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

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