zoukankan      html  css  js  c++  java
  • Socket文件传输

    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) + "% ");

       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 + " ");
     }

     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();

      }
     }
    }

  • 相关阅读:
    数据中心 CLOS 架构
    CLOS网络的无阻塞条件
    网络层 IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)
    Redis数据库之经典考核习题
    Redis数据库之服务器主从配置
    Redis数据库之KEY的操作与事务管理
    Redis数据库之数据基本管理操作
    Redis数据库安装与配置调试
    基于windows的Redis后台服务安装卸载管理
    面向对象数据模型的构建和分析
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3278066.html
Copyright © 2011-2022 走看看