Java: TCP 文件上传

Server & Client

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Utils.java

package den;


import java.io.*;
import java.nio.charset.StandardCharsets;

public class Utils{
  public static byte[] streamToByteArray(InputStream inputStream) throws IOException{
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    byte[] buf = new byte[1024];
    int len;
    while((len = inputStream.read(buf)) != -1){
      byteArrayOutputStream.write(buf, 0, len);
    }
    byte[] bytes = byteArrayOutputStream.toByteArray();
    byteArrayOutputStream.close();
    // inputStream.close();  会引起相关socket关闭
    return bytes;
  }

  public static String streamToString(InputStream inputStream) throws IOException{
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
    String line;
    StringBuilder stringBuilder = new StringBuilder();
    while((line = bufferedReader.readLine()) != null){
      stringBuilder.append(line).append("\n");
    }
    // inputStream.close();
    return stringBuilder.toString();
  }
}

UploadServer.java

package den;


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

public class UploadServer{
  public static void main(String[] args) throws IOException{
    ServerSocket serverSocket = new ServerSocket(5555, 2048, InetAddress.getLocalHost());
    System.out.println("serverSocket.getLocalSocketAddress() = " + serverSocket.getLocalSocketAddress());

    Socket socket = serverSocket.accept();

    InputStream inputStream = socket.getInputStream();
    byte[] bytes = Utils.streamToByteArray(inputStream);
    BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("src/p.png"));
    bufferedOutputStream.write(bytes);

    OutputStream outputStream = socket.getOutputStream();
    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
    bufferedWriter.write("server aa\n");
    bufferedWriter.write("server bb\n");
    bufferedWriter.newLine();
    bufferedWriter.flush();

    bufferedOutputStream.close();
    bufferedWriter.close();
    inputStream.close();
    outputStream.close();
    socket.close();
    serverSocket.close();
    // FileInputStream fileInputStream = new FileInputStream("src/img.png");
    // byte[] bytes = Utils.streamToByteArray(fileInputStream);

    // FileInputStream fileInputStream = new FileInputStream("src/b.properties");
    // String s = Utils.streamToString(fileInputStream);
    // System.out.println("s = " + s);


  }
}

UploadClient.java

package den;


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

public class UploadClient{
  public static void main(String[] args) throws IOException{
    Socket socket = new Socket(InetAddress.getLocalHost(), 5555);

    FileInputStream fileInputStream = new FileInputStream("src/img.png");
    byte[] bytes = Utils.streamToByteArray(fileInputStream);
    OutputStream outputStream = socket.getOutputStream();
    BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
    bufferedOutputStream.write(bytes);
    socket.shutdownOutput();

    InputStream inputStream = socket.getInputStream();
    String s = Utils.streamToString(inputStream);
    System.out.println(s);

    bufferedOutputStream.close();
    socket.close();

  }
}

 

posted @ 2022-04-03 14:21  ascertain  阅读(35)  评论(0编辑  收藏  举报