2012-04-10 209 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