最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android通過(guò)SOCKET下載文件的方法

 更新時(shí)間:2015年12月29日 14:20:07   作者:q757989418  
這篇文章主要介紹了Android通過(guò)SOCKET下載文件的方法,實(shí)例分析了Android使用Socket進(jìn)行文件傳輸?shù)募记?需要的朋友可以參考下

本文實(shí)例講述了Android通過(guò)SOCKET下載文件的方法。分享給大家供大家參考,具體如下:

服務(wù)端代碼

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();//創(chuàng)建線程
  }
 }
 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);
      //根據(jù)路徑和文件名獲取文件
      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());//發(fā)送文件大小
      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 = "服務(wù)器IP";
  int socketPort = "服務(wù)端口號(hào)";
  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(); // 清理緩沖,確保發(fā)送到服務(wù)端
     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("開(kāi)始下載");
     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();
    }
   }
  }
 }

基本可以直接用,根據(jù)自己需要稍微改動(dòng)就OK了

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Kotlin fun函數(shù)使用方法

    Kotlin fun函數(shù)使用方法

    函數(shù)是執(zhí)行特定任務(wù)的一組相互關(guān)聯(lián)的代碼塊。函數(shù)用于將程序分解為不同的子模塊。它使代碼可重用,并使程序更易于管理,這篇文章主要介紹了Kotlin fun函數(shù)使用方法
    2022-12-12
  • Android 運(yùn)用@JvmName解決函數(shù)簽名沖突問(wèn)題詳解

    Android 運(yùn)用@JvmName解決函數(shù)簽名沖突問(wèn)題詳解

    JvmName注解是Kotlin提供的一個(gè)可以變更編譯器輸出的注解,這里簡(jiǎn)單的介紹一下其使用規(guī)則,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-07-07
  • Kotlin 使用Lambda來(lái)設(shè)置回調(diào)的操作

    Kotlin 使用Lambda來(lái)設(shè)置回調(diào)的操作

    這篇文章主要介紹了Kotlin 使用Lambda來(lái)設(shè)置回調(diào)的操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • Android中的JSON詳細(xì)總結(jié)

    Android中的JSON詳細(xì)總結(jié)

    一種輕量級(jí)的數(shù)據(jù)交換格式,具有良好的可讀和便于快速編寫的特性。業(yè)內(nèi)主流技術(shù)為其提供了完整的解決方案(有點(diǎn)類似于正則表達(dá)式,獲得了當(dāng)今大部分語(yǔ)言的支持),從而可以在不同平臺(tái)間進(jìn)行數(shù)據(jù)交換
    2013-01-01
  • 使用Android WebSocket實(shí)現(xiàn)即時(shí)通訊功能

    使用Android WebSocket實(shí)現(xiàn)即時(shí)通訊功能

    即時(shí)通訊(Instant Messaging)最重要的毫無(wú)疑問(wèn)就是即時(shí),不能有明顯的延遲,要實(shí)現(xiàn)IM的功能其實(shí)并不難,目前有很多第三方,比如極光的JMessage,都比較容易實(shí)現(xiàn)。本文通過(guò)實(shí)例代碼給大家分享Android WebSocket實(shí)現(xiàn)即時(shí)通訊功能,一起看看吧
    2019-10-10
  • Android 從底部彈出Dialog(橫向滿屏)的實(shí)例代碼

    Android 從底部彈出Dialog(橫向滿屏)的實(shí)例代碼

    在android開(kāi)發(fā)中經(jīng)常會(huì)遇到底部彈出框的功能,今天小編抽時(shí)間給大家整理一個(gè)底部彈出橫向滿屏的dialog,需要的朋友參考下
    2016-11-11
  • Android中貝塞爾曲線的繪制方法示例代碼

    Android中貝塞爾曲線的繪制方法示例代碼

    本文主要介紹Android中貝塞爾曲線的繪制方法,這里詳細(xì)介紹了如何繪制貝塞爾曲線,并附有示例代碼,有需要的小伙伴可以參考下
    2016-08-08
  • Android Room的使用詳解

    Android Room的使用詳解

    這篇文章主要介紹了Android Room的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下
    2021-04-04
  • Android使用自定義View實(shí)現(xiàn)餅狀圖的實(shí)例代碼

    Android使用自定義View實(shí)現(xiàn)餅狀圖的實(shí)例代碼

    這篇文章主要介紹了Android使用自定義View實(shí)現(xiàn)餅狀圖的實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Flutter 底部彈窗如何實(shí)現(xiàn)多項(xiàng)選擇

    Flutter 底部彈窗如何實(shí)現(xiàn)多項(xiàng)選擇

    在Flutter中提供了一個(gè)showModelBottomSheet方法用于彈出底部彈窗,本篇基于這個(gè)方法介紹實(shí)現(xiàn)底部彈窗多選的思路和方式。
    2021-06-06

最新評(píng)論

芦溪县| 玉溪市| 温州市| 宁都县| 德清县| 华安县| 秦安县| 金塔县| 汉中市| 西峡县| 榆中县| 兴城市| 邯郸县| 山东| 兴国县| 宁远县| 凤凰县| 博野县| 东乌珠穆沁旗| 九台市| 潍坊市| 彭山县| 新沂市| 夏津县| 东明县| 北安市| 云梦县| 盐津县| 永靖县| 岳阳县| 建昌县| 寿光市| 深水埗区| 合阳县| 三门县| 滦南县| 泽库县| 六安市| 瓮安县| 高台县| 嵊泗县|