Java网络编程—文件传输

本文代码实现了文件传输功能:

  1. 客户端传输本地文件至服务端
  2. 服务端将客户端传输的文件保存在服务端本地
  3. 服务端接收完文件之后给客户端一个接收回复

需要注意的坑点是不管是对于服务端还是客户端来说,两者的输入和输出流一旦关闭,那么两个流以及socket也就无法继续使用了!因此最好的做法就是要关闭就一起关闭!

具体代码如下:

客户端代码

package NetworkProgramming;

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

public class client {
    public static void main(String[] args) throws IOException {
        // connect
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);

        // upload file
        OutputStream out = socket.getOutputStream();
        String path = "/Users/pluto/Code/Java/src/NetworkProgramming/a.jpg";
        FileInputStream fis = new FileInputStream(path);
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = fis.read(buffer)) != -1) {
            out.write(buffer, 0, len);
            out.flush();
        }
        socket.shutdownOutput();

        // close resource
        fis.close();

        // get response
        BufferedReader bfr = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String s = "";
        while ((s = bfr.readLine()) != null) {
            System.out.println(s);
        }

        // close resource
        bfr.close();
        out.close();
        socket.close();
    }
}

服务端代码

package NetworkProgramming;

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

public class server {
    public static void main(String[] args) throws IOException {
        // connect
        ServerSocket serverSocket = new ServerSocket(9999);
        Socket socket = serverSocket.accept();
        System.out.println("get connect!");

        // download file
        InputStream in = socket.getInputStream();
        String path = "/Users/pluto/Code/Java/src/NetworkProgramming/b.jpg";
        File file = new File(path);
        FileOutputStream fos = new FileOutputStream(file);
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = in.read(buffer)) != -1) {
            fos.write(buffer, 0, len);
        }

        // close resource
        fos.close();

        // response
        BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        bfw.write("server get image!");
        bfw.newLine();

        // close resource
        bfw.close();
        in.close();
        socket.close();
        serverSocket.close();
    }
}
posted @ 2023-04-05 19:06  Pluto_Evans  阅读(178)  评论(0)    收藏  举报