国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > 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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北票市| 嘉义市| 财经| 靖安县| 长顺县| 延安市| 平湖市| 泸州市| 灵台县| 罗山县| 登封市| 武川县| 谢通门县| 远安县| 海淀区| 长宁县| 南岸区| 红河县| 调兵山市| 台安县| 保定市| 隆化县| 临夏市| 洛川县| 富阳市| 凤翔县| 万宁市| 天津市| 孝昌县| 峨眉山市| 张家界市| 东乌珠穆沁旗| 和龙市| 嘉鱼县| 五大连池市| 宜川县| 财经| 阳春市| 玉龙| 阿拉善盟| 蓝山县|