📜  java 通过套接字传输文件 - Java (1)

📅  最后修改于: 2023-12-03 15:01:34.711000             🧑  作者: Mango

Java通过套接字传输文件

本文将介绍如何通过Java套接字传输文件。套接字是一种协议,它允许不同计算机之间的进程之间传递数据。Java提供了Socket和ServerSocket类,可以使用这些类来实现套接字通信。

程序框架
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class FileClient {

    public static void main(String[] args) throws IOException {

        // 1. 创建Socket对象,指定要连接的服务器地址和端口号
        Socket socket = new Socket("localhost", 9999);

        // 2. 创建文件对象
        File file = new File("data.txt");

        // 3. 创建文件输入流
        FileInputStream fis = new FileInputStream(file);

        // 4. 获取套接字的输出流
        OutputStream os = socket.getOutputStream();

        // 5. 定义字节数组,用来存储文件的数据
        byte[] buffer = new byte[1024];

        // 6. 定义变量,用来记录读取数据的长度
        int length;

        // 7. 从文件输入流中读取数据,并将其写入套接字的输出流中
        while ((length = fis.read(buffer)) != -1) {
            os.write(buffer, 0, length);
        }

        // 8. 关闭文件输入流
        fis.close();

        // 9. 关闭套接字的输出流
        os.close();

        // 10. 关闭套接字
        socket.close();

    }
}
实现流程
  1. 创建一个套接字对象,并指定要连接的服务器地址和端口号。
  2. 创建一个文件对象,并指定要传输的文件路径。
  3. 创建文件输入流,用于从指定文件中读取数据。
  4. 获取套接字的输出流,用于将读取的数据写入套接字。
  5. 定义一个字节数组,用于存储从文件读取的数据。
  6. 定义一个变量,用于记录从文件输入流中读取数据的长度。
  7. 循环从文件输入流中读取数据,并将其写入套接字的输出流中,直到读取到文件的末尾。
  8. 关闭文件输入流。
  9. 关闭套接字的输出流。
  10. 关闭套接字。
服务器端代码
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class FileServer {

    public static void main(String[] args) throws IOException {

        // 1. 创建ServerSocket对象,并指定要监听的端口号
        ServerSocket serverSocket = new ServerSocket(9999);

        // 2. 调用accept()方法,等待客户端连接
        Socket socket = serverSocket.accept();

        // 3. 创建文件输出流,用于向指定文件中写入数据
        FileOutputStream fos = new FileOutputStream("new.txt");

        // 4. 获取套接字的输入流
        InputStream is = socket.getInputStream();

        // 5. 定义字节数组,用来存储读取的数据
        byte[] buffer = new byte[1024];

        // 6. 定义变量,用来记录读取数据的长度
        int length;

        // 7. 从套接字的输入流中读取数据,并将其写入指定文件
        while ((length = is.read(buffer)) != -1) {
            fos.write(buffer, 0, length);
        }

        // 8. 关闭文件输出流
        fos.close();

        // 9. 关闭套接字的输入流
        is.close();

        // 10. 关闭套接字
        socket.close();

        // 11. 关闭ServerSocket对象
        serverSocket.close();
    }
}
实现流程
  1. 创建一个ServerSocket对象,并指定要监听的端口号。
  2. 调用accept()方法,等待客户端连接。如果没有客户端连接,该方法将一直阻塞。
  3. 创建文件输出流,用于向指定文件中写入数据。
  4. 获取套接字的输入流,用于从客户端接收数据。
  5. 定义一个字节数组,用于存储从套接字的输入流中读取的数据。
  6. 定义一个变量,用于记录从套接字的输入流中读取数据的长度。
  7. 循环从套接字的输入流中读取数据,并将其写入指定的文件中。
  8. 关闭文件输出流。
  9. 关闭套接字的输入流。
  10. 关闭套接字。
  11. 关闭ServerSocket对象。
总结

本文介绍了Java如何通过套接字传输文件。在实现时,我们需要分别实现客户端和服务器端,通过套接字将数据传输到对方。在实现时,需要注意流的打开和关闭顺序,以及要处理可能出现的异常。通过本文的介绍,希望读者可以掌握Java套接字的相关知识并实现套接字文件传输功能。