jcifs.smb.SmbException:找不到网络名称

时间:2012-04-10 10:58:28

标签: java web-applications smb

以下是我的代码

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)

这与该特定共享文件夹的用户权限有关,还是我做错了什么 请建议

4 个答案:

答案 0 :(得分:2)

我遇到了此错误消息,结果发现问题是我的网络路径不正确。您需要确保正确配置NtlmPasswordAuthentication对象,网络路径正确,并且正确设置了jcifs.netbios.wins属性,如第一个示例所示{{3} }。

例如,要加载远程属性文件:

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]

..您可以导航到您的文件,以确保您的路径正确。

答案 1 :(得分:1)

在遇到此问题将近1天后,我意识到这些异常毫无意义

  • 我只是给出了服务器端位置的错误路径

下面是和平代码对我有用

        String domain = "domain"
        String user = "username"
        String pass = "password"
        String IP = "xx.yy.zz.aa"
        String sharedFolder="//my//path//to//server//";

    String path="smb://$IP"+sharedFolder+"test.txt";
    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(domain, user, pass );
    SmbFile smbFile = new SmbFile(path,auth);
    SmbFileOutputStream smbfos = new SmbFileOutputStream(smbFile);
    smbfos.write("testing....and writing to a file".getBytes());
    System.out.println("completed ...nice !");

答案 2 :(得分: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与我的相比。 但正如我之所说的那样,当我深入smb:// host时,它会在Andriod 2.0上抛出空输入param,但我希望这可以帮助你。

答案 3 :(得分:0)

我遇到了这个问题,结果发现我没看到映射到我的Windows共享驱动器的共享名称是什么...所以,使用Mac OS,我运行了:

smbutil view smb://MYUSERNAME@HOSTNAME

在提示我输入密码后,我显示了一个共享名称列表(当我使用Windows查看这些内容时,这些名称并不明显)。一旦找到了我的共享名称,就像使用JCIFS连接时一样简单:

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