文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android通过SOCKET下载文件的方法

2022-06-06 09:21

关注

本文实例讲述了Android通过SOCKET下载文件的方法。分享给大家供大家参考,具体如下:

服务端代码


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.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class FunctionServer {
 private static int PORT = 2012;
 private String path = "需要下载的文件所在路径";
 public static void main(String[] args) throws IOException{
  FunctionServer server = new FunctionServer();
  server.start();
 }
 public void start() throws IOException{
  ServerSocket ss = new ServerSocket(PORT);
  while(true){
   Socket s = ss.accept();
   new Service(s).start();//创建线程
  }
 }
 class Service extends Thread{
  Socket s;
  public Service(Socket s){
   this.s = s;
  }
  public void run(){
   try{
    InputStream in = s.getInputStream();//得到输入流
    Scanner sc = new Scanner(in);
    OutputStream out = s.getOutputStream();
    while(true){
     String str = sc.nextLine();//读取文件名
     if(!str.equals(null)){
      System.out.println("你的文件名是"+str);
      //根据路径和文件名获取文件
      File f = new File(path+str);
      FileInputStream fis = new FileInputStream(f);
      DataInputStream dis = new DataInputStream(new BufferedInputStream(fis));
      byte[] buffer = new byte[8192];
      DataOutputStream ps = new DataOutputStream(out);
      ps.writeLong((long) f.length());//发送文件大小
      ps.flush();
      while(true) {
       int read = 0;
       if(dis!=null){
        read = fis.read(buffer);
       }
       if(read == -1){
        break;
       }
       ps.write(buffer,0,read);
      }
      ps.flush();
      dis.close();
      s.close();
      out.flush();
      break;
     }
    }
   }catch(IOException e){
    e.printStackTrace();
   }
  }
 }
}

客户端代码,下载线程


class DownloadThread extends Thread {
  Socket socket;
  InputStream in;
  OutputStream out;
  String path = "文件保存路径";
  String functionName;
  String serverIp = "服务器IP";
  int socketPort = "服务端口号";
  int fileSize,downLoadFileSize;
  public DownloadThread(String functionName) {
   this.functionName = functionName;
  }
  @Override
  public void run() {
   Looper.prepare();
   while(!Thread.interrupted()){
    try {
     socket = new Socket(serverIp, socketPort);
     InputStream in = socket.getInputStream();
     OutputStream out = socket.getOutputStream();
     out.write((functionName + "\n").getBytes("gbk"));
     out.flush(); // 清理缓冲,确保发送到服务端
     File f = new File(path + functionName);
     OutputStream song = new FileOutputStream(f);
     DataInputStream dis = new DataInputStream(
       new BufferedInputStream(in));
     DataOutputStream dos = new DataOutputStream(
       new BufferedOutputStream(song));
     fileSize = (int) dis.readLong() - 1;
     System.out.println("开始下载");
     byte[] buffer = new byte[8192];
     while (true) {
      int read = 0;
      if (dis != null) {
       read = dis.read(buffer);
       downLoadFileSize += read;
        }
      if (read == -1) {
       break;
      }
      dos.write(buffer, 0, read);
     }
     System.out.println("文件下载完成");
     dos.close();
    } catch (UnknownHostException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } finally {
     this.interrupt();
    }
   }
  }
 }

基本可以直接用,根据自己需要稍微改动就OK了

希望本文所述对大家Android程序设计有所帮助。

您可能感兴趣的文章:Android 下载文件通知栏显示进度条功能的实例代码Android中使用AsyncTask实现下载文件动态更新进度条功能android中实现OkHttp下载文件并带进度条android实现多线程下载文件(支持暂停、取消、断点续传)Android实现Service下载文件,Notification显示下载进度的示例使用Android系统提供的DownloadManager来下载文件Android实现多线程下载文件的方法Android实现下载文件功能的方法Android使用Handler实现下载文件功能


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯