MST

星途 面试题库

面试题:Java中Socket通信如何实现简单的文件传输

请描述在Java中使用Socket实现客户端向服务器端传输一个文本文件的大致步骤,并给出关键代码示例。
45.0万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

客户端实现步骤

  1. 创建Socket对象:指定服务器的IP地址和端口号。
  2. 获取输出流:通过Socket对象获取OutputStream,用于向服务器发送数据。
  3. 读取文件内容:使用FileInputStream读取本地文本文件的内容。
  4. 发送文件内容:将读取到的文件内容通过输出流发送给服务器。
  5. 关闭资源:发送完毕后,关闭FileInputStreamSocket

关键代码示例

import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        String serverIp = "127.0.0.1";
        int serverPort = 12345;
        String filePath = "example.txt";

        try (Socket socket = new Socket(serverIp, serverPort);
             OutputStream outputStream = socket.getOutputStream();
             FileInputStream fileInputStream = new FileInputStream(filePath)) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = fileInputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }
            System.out.println("文件传输完成");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

服务器端实现步骤

  1. 创建ServerSocket对象:指定监听的端口号。
  2. 监听连接:调用accept()方法等待客户端连接。
  3. 获取输入流:通过与客户端建立的Socket获取InputStream,用于接收数据。
  4. 创建文件并写入数据:使用FileOutputStream创建新文件,并将接收到的数据写入文件。
  5. 关闭资源:接收完毕后,关闭FileOutputStreamSocketServerSocket

关键代码示例

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) {
        int serverPort = 12345;
        String savePath = "received.txt";

        try (ServerSocket serverSocket = new ServerSocket(serverPort);
             Socket clientSocket = serverSocket.accept();
             InputStream inputStream = clientSocket.getInputStream();
             FileOutputStream fileOutputStream = new FileOutputStream(savePath)) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                fileOutputStream.write(buffer, 0, bytesRead);
            }
            System.out.println("文件接收完成");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}