Java Socket文件传输

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class FileServer {

 private int port = 1128;

 private ServerSocket servSocket;

 private Socket socket;

 
 private DataInputStream input;

 
 private DataOutputStream outPut;

 private String savePath = "E:\\up\\";

 public void startServer() {

  // 已经传输的文件大小
  int ycSize = 0;

  // 文件总大小
  long sumSize = 0;

  // 缓存大小
  int hcSize = 8192;

  // 缓存
  byte[] hc = new byte[hcSize];

  try {

   servSocket = new ServerSocket(port);

   socket = servSocket.accept();

   input = new DataInputStream(new BufferedInputStream(
     socket.getInputStream()));

  } catch (IOException e) {

   e.printStackTrace();

  }

  try {
   // 将文件名字读取进来
   savePath += input.readUTF();
   // 文件的长度读取进来(实际只是为了显示进度)
   sumSize = input.readLong();

  } catch (IOException e) {

   e.printStackTrace();

  }

  try {

   outPut = new DataOutputStream(new BufferedOutputStream(
     new FileOutputStream(savePath)));

  } catch (FileNotFoundException e) {

   e.printStackTrace();

  }

  while (true) {

   int read = 0;

   if (input != null) {

    try {

     read = input.read(hc);

    } catch (IOException e) {

     e.printStackTrace();
    }
   }

   ycSize += read;

   if (read == -1) {

    break;

   }

   // 下面进度条本为图形界面的prograssBar做的,这里如果是打文件,可能会重复打印出一些相同的百分比
   System.out.println("文件接收了" + (ycSize * 100 / sumSize) + "%\n");

   try {

    outPut.write(hc, 0, read);

   } catch (IOException e) {

    e.printStackTrace();

   }

  }

  if (outPut != null) {
   try {
    outPut.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
   outPut = null;
  }

  if (input != null) {
   try {
    input.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
   input = null;
  }

  if (socket != null) {
   try {
    socket.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
   socket = null;
  }

  if (servSocket != null) {
   try {
    servSocket.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
   servSocket = null;
  }

  System.out.println("接收完成,文件存为" + savePath + "\n");
 }

 public static void main(String[] args) {
  FileServer fileServer = new FileServer();
  fileServer.startServer();
 }
}

 

 

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class FileClient {
 public static void main(String[] args) {

  String filePath = "E:\\TDDOWNLOAD\\DEEPBBS.COM_GhostXPsp3_2011.07CJ.iso";

  File file = new File(filePath);

  DataInputStream input = null;
  DataOutputStream output = null;
  Socket socket = null;

  try {

   String ip = "192.168.1.104";
   int port = 1128;

   socket = new Socket(ip, port);

   input = new DataInputStream(new BufferedInputStream(
     new FileInputStream(filePath)));

   output = new DataOutputStream(socket.getOutputStream());

  } catch (UnknownHostException e) {

   e.printStackTrace();

  } catch (IOException e) {

   e.printStackTrace();

  }

  try {
   output.writeUTF(file.getName());

   output.flush();

   output.writeLong((long) file.length());

   output.flush();

  } catch (IOException e) {

   e.printStackTrace();

  }

  int bufferSize = 8192;
  byte[] buf = new byte[bufferSize];

  while (true) {

   int read = 0;

   if (input != null) {

    try {

     read = input.read(buf);

    } catch (IOException e) {

     e.printStackTrace();

    }

   }

   if (read == -1) {

    break;
   }

   try {

    output.write(buf, 0, read);

    output.flush();

   } catch (IOException e) {

    e.printStackTrace();

   }

  }

  try {
   input.close();

   output.close();

   socket.close();

  } catch (IOException e) {

   e.printStackTrace();

  }
 }
}