2012-04-10 208 views
3

以下是我的一段代碼jcifs.smb.SmbException:網絡名稱無法找到

SmbFile catalExp = new SmbFile("smb://<Shared machine name>/Project share/Home/4. Folders/planning - Design & Exec/sample.txt", 
        new NtlmPasswordAuthentication(LoadProp.getShrdDomain(),"user","paswd")); 

在這方面,我正在錯誤

jcifs.smb.SmbException: The network name cannot be found 
    at jcifs.smb.SmbTransport.send(SmbTransport.java:753) 
    at jcifs.smb.SmbSession.sessionSetup(SmbSession.java:140) 
    at jcifs.smb.SmbSession.send(SmbSession.java:103) 
    at jcifs.smb.SmbTree.treeConnect(SmbTree.java:132) 
    at jcifs.smb.SmbFile.connect(SmbFile.java:674) 
    at jcifs.smb.SmbFile.connect0(SmbFile.java:644) 
    at jcifs.smb.SmbFile.open0(SmbFile.java:700) 
    at jcifs.smb.SmbFile.createNewFile(SmbFile.java:2027) 

這是什麼做的用戶的權利,以特定的共享文件夾或我做錯什麼 請指教

回答

0

嗯,我也收到這個錯誤,但只在一個設備上,我的代碼在Android 4上的作品。 04是

String strprog = "STRING CREATED| "; //debug log string 
    try { 
     strprog += "NTLM| "; 
     NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("username:password"); 
     strprog += "SMB| "; 
     SmbFile file = new SmbFile("smb://<pcname>/foldername/filename.txt",auth); 

     strprog += "EXIST| "; 
     String there = String.valueOf(file.exists()); 

     strprog += "View| "; 
     TextView pp; 
     pp = (TextView) findViewById(R.id.tv); 
     pp.setText(there); 



    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     strprog += "ERROR! "; 
     TextView ll; 
     ll = (TextView) findViewById(R.id.tv); 


     ll.setText(strprog + e.getStackTrace().toString() + " " + e.getMessage() + " " + e.getLocalizedMessage()); 
    } 

我看到的唯一區別是你有你的NtlmPasswordAuth相比,我的。 但正如我所述,由於某些原因,這將在Andriod 2.0上拋出null輸入param,當我深入smb://主機,但我希望這可以幫助你。

1

我遇到了這個錯誤信息,事實證明問題是我的網絡路徑不正確。您需要確保NtlmPasswordAuthentication對象配置正確,網絡路徑正確,並且已經正確設置jcifs.netbios.wins屬性,如第一個示例on this page中所示。

例如,要加載遠程屬性文件:

final NtlmPasswordAuthentication AUTH = new NtlmPasswordAuthentication("domainname", "username", "password"); 

Config.setProperty("jcifs.netbios.wins", "10.10.1.1"); 

Properties props = new Properties(); 
InputStream in = new SmbFileInputStream(new SmbFile("smb://10.10.1.1:445/rootfolder/path/filename.properties", AUTH)); 
props.load(in); 

(你需要添加的try/catch和輸入流閉)

的一個好方法,以確保所有的參數是正確的是使用smb/cifs客戶端測試登錄和查找文件。在Linux/UNIX示例的smbclient:

smbclient -Uusername -p 139 //10.10.1.1/rootfolder 

當你與smbclient的登錄域被顯示在頂部:

Domain=[DOMAINNAME] 

..和您可以瀏覽到您的文件,以確保你已經得到了正確的路徑。

0

我有這個問題,事實證明,我沒有看到什麼共享名是被映射到我的Windows共享驅動器......所以,使用Mac OS,我跑:

smbutil view smb://[email protected]

在系統提示輸入密碼後,我顯示了一個共享名稱列表(當我使用Windows查看這些東西時,這些名稱並不明顯)。當我發現我的共享名,這是因爲使用與JCIFS連接時一樣簡單:

new SmbFile("smb://HOSTNAME/SHARENAME/path/I/was/trying/to/access", auth);

+0

#James做什麼用的共享名稱是什麼意思?這是否就像當你配置共享的東西時你會提供一個共享的名字? – Sundhar 2015-03-06 06:53:24

+1

這也適用於我,並拯救我soooo很頭疼!感謝和+1! @Sundhar - 當你運行這個命令時,你會明白:你將通過smb://從遠程服務器上的所有共享(目錄)中打印出來。 – smeeb 2015-09-04 17:09:01