【Android 冷知識】利用SMB協議遠程查看電腦文件或者其他存儲設備

1.說明

為什么說是冷知識,因為大多數項目用不到,所以歸類為冷知識。
  本文主要介紹如何通過手機來瀏覽同局域網內電腦上的文件或者同局域網內其他存儲設備上的文件(存儲設備有SMBA服務)。

2.用到的資源:

JCIFS項目: https://jcifs.samba.org
  SMB錯誤碼: https://msdn.microsoft.com/en-us/library/ee441884.aspx

3.簡單使用

a.去官網下載最新的"jcifs-1.3.18.jar"并引入項目中去。

b.在自己的Application onCreate中設置基礎配置

  System.setProperty("jcifs.smb.client.dfs.disabled", "true");
  System.setProperty("jcifs.smb.client.soTimeout", "1000000");
  System.setProperty("jcifs.smb.client.responseTimeout", "30000");

* jcifs.smb.client.dfs.disabled 這個屬性一定記得設置true,其默認值是false,不然連接會非常非常的慢。
  jcifs.smb.client.dfs.soTimeout、jcifs.smb.client.responseTimeout 這兩個屬性可以設的稍微大點,避免網絡不穩定帶來的連接中斷。

c.登錄鑒權(針對電腦設置了密碼的情況)

  String ip = "192.168.1.100";
  String username = "AFAP";
  String password = "123456";

  UniAddress mDomain = UniAddress.getByName(ip);
  NtlmPasswordAuthentication mAuthentication = new NtlmPasswordAuthentication(ip, username, password);
  SmbSession.logon(mDomain, mAuthentication);

*至此,就完成了鑒權,接下來可以瀏覽電腦里的文件了。當然,實際過程你會遇到各種異常,請根據日志解決。

d.瀏覽各磁盤下文件夾與文件

  // 獲取跟目錄然后獲取下面各個盤符
  String rootPath = "smb://" + ip + "/";
  SmbFile mRootFolder;
  // 匿名登錄即無需登錄
  if (mSpu.isAnonymous()) {
    mRootFolder = new SmbFile(rootPath);
  } else {
    mRootFolder = new SmbFile(rootPath, mAuthentication);
  }

  try {
    SmbFile[] files;
    files = mRootFolder.listFiles();
    for (SmbFile smbfile : files) {
        mAdapterList.add(smbfile);
    }
  } catch (SmbException e) {
    // ...
  }

后面就是根據得到的文件進行展示或者其他操作了,比如復制、改名、上傳等。

4.注意點

  • 被訪問目標需要關閉防火墻;
  • 加載遠程文件列表等操作都是網絡操作,不能在UI線程進行。

其他相關

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容