Java TCP 实现文件传输

Java TCP 实现文件传输

环境

CentOS Linux release 8.1.1911 (Core)
java version "14.0.2" 2020-07-14

实现代码

ReceiveFileServer

其中,<port>为接收文件进程使用的端口号

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class ReceiveFileServer {
    
    
    private static final int PORT = <port>;
    private static final int BUFFER_SIZE = 1000;
    
    public static void main(String[] args) {
    
    
        try {
    
    
            while (true) {
    
    
                ServerSocket serverSocket = new ServerSocket(PORT);
                Socket socket = serverSocket.accept();

                InputStream inputStream = socket.getInputStream();

                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
                String fileName = bufferedReader.readLine().toString();
                FileOutputStream fileOutputStream = new FileOutputStream(fileName);

                

                socket = serverSocket.accept();
                inputStream = socket.getInputStream();
                byte[] buffer = new byte[BUFFER_SIZE];
                int length = 0;

                while ((length = inputStream.read(buffer)) != -1) {
    
    
                    fileOutputStream.write(buffer, 0, length);
                }
                fileOutputStream.flush();

                System.out.println("Receive file [" + fileName + "]");

                socket.close();
                serverSocket.close();
                fileOutputStream.close();
            }
        } catch(IOException e) {
    
    
            e.printStackTrace();
        }
    }
}

SendFileClient

其中<hostname>为服务器IP地址,<port>为接收文件进程使用的端口号,与上述服务器端代码中的端口号一致

sendMessage方法中的message变量为在服务器中保存的路径

package com.demo.filetransmission;

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

public class SendFileClient {
    
    
    private static final String IP = "<hostname>";
    private static final int PORT = <port>;

    public void sendMessage(String message) {
    
    
        Socket socket = null;
        OutputStream outputStream = null;
        try {
    
    
            socket = new Socket(IP, PORT);

            outputStream = socket.getOutputStream();
            DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
            System.out.println("Sending...");
            System.out.println(message);

            dataOutputStream.write(message.getBytes("utf-8"));
            dataOutputStream.flush();
            System.out.println("Send Successfully!");

            socket.shutdownOutput();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } catch (UnknownError e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            try {
    
    
                socket.close();
                outputStream.close();
            } catch (IOException e) {
    
    
                e.printStackTrace();
            }
        }
    }

    public void uploadFile(String fileName) {
    
    
        Socket socket = null;
        FileInputStream fileInputStream = null;
        OutputStream outputStream = null;
        OutputStream fileNameOutputStream = null;
        DataOutputStream dataOutputStream;
        try {
    
    
            socket = new Socket(IP, PORT);
            fileInputStream = new FileInputStream(fileName);
            outputStream = socket.getOutputStream();

            byte[] buffer = new byte[1024];
            int length = 0;
            while ((length = fileInputStream.read(buffer)) != -1) {
    
    
                outputStream.write(buffer, 0, length);
            }
            socket.shutdownOutput();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } catch (UnknownError e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            try {
    
    
                fileInputStream.close();
                socket.close();
                outputStream.close();
            } catch (IOException e) {
    
    
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
    
    
        SendFileClient client = new SendFileClient();

        client.sendMessage("./res/file.mp4");
        client.uploadFile("./res/file.mp4");

    }
}

最后

  • 由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解!

猜你喜欢

转载自blog.csdn.net/qq_44486439/article/details/112076512