Java JCIFS JCIFS.smb.smb异常:连接到系统的设备未运行

Java JCIFS JCIFS.smb.smb异常:连接到系统的设备未运行,java,jcifs,Java,Jcifs,我们使用JCIFS(1.3.17)从Windows2003文件服务器加载图像文件。不幸的是,加载在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]

我们使用JCIFS(1.3.17)从Windows2003文件服务器加载图像文件。不幸的是,加载在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.smb.SmbException:连接到系统的设备无法正常工作。
在jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:563)~[jcifs-1.3.17.jar:na]
在jcifs.smb.SmbTransport.send(SmbTransport.java:663)~[jcifs-1.3.17.jar:na]
在jcifs.smb.SmbSession.send(SmbSession.java:238)~[jcifs-1.3.17.jar:na]
在jcifs.smb.SmbTree.send(SmbTree.java:119)~[jcifs-1.3.17.jar:na]
在jcifs.smb.SmbFile.send(SmbFile.java:775)~[jcifs-1.3.17.jar:na]
在jcifs.smb.SmbFile.open0(SmbFile.java:989)~[jcifs-1.3.17.jar:na]
在jcifs.smb.SmbFile.open(SmbFile.java:1006)~[jcifs-1.3.17.jar:na]
在jcifs.smb.SmbFileInputStream.(SmbFileInputStream.java:73)~[jcifs-1.3.17.jar:na]
在jcifs.smb.SmbFileInputStream.(SmbFileInputStream.java:65)~[jcifs-1.3.17.jar:na]
在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();
        }

    }
for(int i=0;i<20000;i++){
试一试{
SmbFile SmbFile=新SmbFile(“smb://fileserver/share/image.jpg“,auth);
byte[]data=IOUtils.toByteArray(smbFile.getInputStream());
System.out.println(smbFile.getPath()+“”+data.length);
}捕获(SMBE异常){
e、 printStackTrace();
}捕获(格式错误){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}

我们已经检查了文件服务器上的错误日志,但没有任何内容可查看,因此我们假设我们做错了什么,或者JCIFS中有什么东西需要正确配置。

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