【Java】文件传输服务器端和客户端

思路:
客户端发送文件给服务器端,服务器端负责接收文件并存储。

下列代码测试通过,在IDEA中新建两个工程,每个工程的文件如下:

文件传输服务器端:

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

public class Server {
    
    

    private static final int PORT = 8888;

    public static void main(String[] args) {
    
    
        try {
    
    
            // 创建socket
            ServerSocket serverSocket = new ServerSocket(PORT);
            System.out.println("Listening on port " + PORT);

            // 监听客户端连接
            Socket socket = serverSocket.accept();

            // 接收客户端发来的文件
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(socket.getInputStream())
            );

            // 将文件存储在本地
            PrintWriter writer = new PrintWriter(
                    new FileOutputStream("e:\\djtest\\receive\\just.txt", true)
            );

            // 真正的存储过程:逐行读取并存储
            String line = null;
            while((line = reader.readLine()) != null){
    
    
                writer.println(line);
            }
            writer.close();

            // 返回信息给客户端
            PrintWriter responseWriter = new PrintWriter(socket.getOutputStream(), true);//一定要加true
            responseWriter.println("服务端:接收完毕!");

            // 释放系统资源
            socket.close();
            serverSocket.close();


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

文件传输客户端:

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

public class Client {
    
    

    private static final String HOST_IP = "192.168.43.43";
    private static final int PORT = 8888;

    public static void main(String[] args) {
    
    

        try {
    
    
            // 创建套接字
            Socket socket = new Socket(HOST_IP, PORT);

            // 按行读取文件
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(new FileInputStream("e:\\djtest\\send\\just.txt"))
            );

            // 将文件写入网络
            PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);

            // 真正的发送过程:逐行写入网络
            String line = null;
            while((line = reader.readLine()) != null){
    
    
                System.out.println(line);
                writer.println(line);
            }
            socket.shutdownOutput();

            // 接收服务端返回的信息
            BufferedReader respReader = new BufferedReader(
                    new InputStreamReader(socket.getInputStream())
            );

            // 将服务端返回的信息打印出来
            String response = respReader.readLine();
            System.out.println(response);

            // 把资源还给系统
            writer.close();
            reader.close();
            respReader.close();
            socket.close();

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

猜你喜欢

转载自blog.csdn.net/qq_30885821/article/details/109326210
今日推荐