JCIFS jcifs.smb.SmbException:连接到系统的设备无法正常工作

Posted

技术标签:

【中文标题】JCIFS jcifs.smb.SmbException:连接到系统的设备无法正常工作【英文标题】:JCIFS jcifs.smb.SmbException: A device attached to the system is not functioning 【发布时间】:2013-07-30 08:27:31 【问题描述】:

我们正在使用 JCIFS (1.3.17) 从 Windows 2003 文件服务器加载图像文件。不幸的是,在 16384 个文件之后加载停止工作,并且在尝试访问更多文件时出现以下异常:

jcifs.smb.SmbException: A device attached to the system is not functioning.
    at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:563) ~[jcifs-1.3.17.jar:na]
    at jcifs.smb.SmbTransport.send(SmbTransport.java:663) ~[jcifs-1.3.17.jar:na]
    at jcifs.smb.SmbSession.send(SmbSession.java:238) ~[jcifs-1.3.17.jar:na]
    at jcifs.smb.SmbTree.send(SmbTree.java:119) ~[jcifs-1.3.17.jar:na]
    at jcifs.smb.SmbFile.send(SmbFile.java:775) ~[jcifs-1.3.17.jar:na]
    at jcifs.smb.SmbFile.open0(SmbFile.java:989) ~[jcifs-1.3.17.jar:na]
    at jcifs.smb.SmbFile.open(SmbFile.java:1006) ~[jcifs-1.3.17.jar:na]
    at jcifs.smb.SmbFileInputStream.<init>(SmbFileInputStream.java:73) ~[jcifs-1.3.17.jar:na]
    at jcifs.smb.SmbFileInputStream.<init>(SmbFileInputStream.java:65) ~[jcifs-1.3.17.jar:na]
    at jcifs.smb.SmbFile.getInputStream(SmbFile.java:2844) ~[jcifs-1.3.17.jar:na]

JCIFS 中似乎有某种限制或设置导致了这个问题。

这里是一些重现问题的测试代码:

    for (int i = 0; i < 20000; i++) 
        try 
            SmbFile smbFile = new SmbFile("smb://fileserver/share/image.jpg", auth);
            byte[] data = IOUtils.toByteArray(smbFile.getInputStream());
            System.out.println(smbFile.getPath() + "  " + data.length);
         catch (SmbException e) 
            e.printStackTrace();
         catch (MalformedURLException e) 
            e.printStackTrace();
         catch (IOException e) 
            e.printStackTrace();
        

    

我们检查了文件服务器上的错误日志,但没有什么可看的,因此我们假设我们做错了什么,或者我们必须正确配置 JCIFS 中的某些内容。

【问题讨论】:

【参考方案1】:

可能找到了解决方案: 看起来好像每个会话只能通过 new SmbFile() 打开 16384 个文件。您必须调用 SmbFileInputStream.close() 来调用包 private SmbFile.close() 这似乎向服务器发送 SmbComClose 消息,该服务器关闭请求并释放资源。

【讨论】:

以上是关于JCIFS jcifs.smb.SmbException:连接到系统的设备无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

JCIFS - 连接中断

试图实现 jcifs 和 UniAddress 并得到 NoClassDefFoundError?

JCIFS SmbException

使用最后一个 smb jcifs-ng jar 复制文件

jcifs.smb.SmbException:系统找不到指定的文件?

jcifs.smb.SmbAuthException:登录失败:未知用户名或密码错误。