首页 > 系统 > Android > 正文

Android通过SOCKET下载文件的方法

2020-04-11 11:06:16
字体:
来源:转载
供稿:网友

本文实例讲述了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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表