gpt4 book ai didi

java - JCIFS - 连接中断

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:29:03 27 4
gpt4 key购买 nike

我需要连接到 UNC“目录”并在该目录中创建一个文件。我在 stackoverflow 上找到了这个条目:access to file using Java with Samba JCIFS .一件好事是它在我的系统上运行良好,但是当我将程序放到服务器上时,出现以下异常:

Exception in thread "main" jcifs.smb.SmbException: Failed to connect: <serverName>
jcifs.util.transport.TransportException: Connection in error
jcifs.util.transport.TransportException
java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at jcifs.smb.SmbTransport.ssn139(SmbTransport.java:196)
at jcifs.smb.SmbTransport.negotiate(SmbTransport.java:249)
at jcifs.smb.SmbTransport.doConnect(SmbTransport.java:322)
at jcifs.util.transport.Transport.run(Transport.java:241)
at java.lang.Thread.run(Unknown Source)
at jcifs.util.transport.Transport.run(Transport.java:258)
at java.lang.Thread.run(Unknown Source)
at jcifs.util.transport.Transport.connect(Transport.java:154)
at jcifs.smb.SmbTransport.connect(SmbTransport.java:307)
at jcifs.smb.SmbTree.treeConnect(SmbTree.java:156)
at jcifs.smb.SmbFile.doConnect(SmbFile.java:911)
at jcifs.smb.SmbFile.connect(SmbFile.java:954)
at jcifs.smb.SmbFile.connect0(SmbFile.java:880)
at jcifs.smb.SmbFile.open0(SmbFile.java:972)
at jcifs.smb.SmbFile.open(SmbFile.java:1006)
at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:142)
at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:97)
at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:67)
at path.unc.TestUNC.main(TestUNC.java:79)
at jcifs.smb.SmbTransport.connect(SmbTransport.java:309)
at jcifs.smb.SmbTree.treeConnect(SmbTree.java:156)
at jcifs.smb.SmbFile.doConnect(SmbFile.java:911)
at jcifs.smb.SmbFile.connect(SmbFile.java:954)
at jcifs.smb.SmbFile.connect0(SmbFile.java:880)
at jcifs.smb.SmbFile.open0(SmbFile.java:972)
at jcifs.smb.SmbFile.open(SmbFile.java:1006)
at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:142)
at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:97)
at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:67)
at path.unc.TestUNC.main(TestUNC.java:79)

我创建了以下代码:

    //... read user, pw and uncPath from console
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("", user, pw);

SmbFile dir = new SmbFile(uncPath, auth);

if (dir.isDirectory()) {
writer.println(uncPath + " is a directory");
}

uncPath = uncPath + "/test.txt";

writer.println("full path = '" + uncPath + "'");

SmbFile smbFile = new SmbFile(uncPath, auth);

writer.println(smbFile.getPermission());

SmbFileOutputStream uncOut = new SmbFileOutputStream(smbFile);
PrintWriter uncPrint = new PrintWriter(uncOut);
uncPrint.println("text from " + TestUNC.class);
uncPrint.flush();
// close stream

这会在控制台上创建以下输出:

    smb://<serverName>/myDirectory is a directory
full path = 'smb://<serverName>/myDirectory/test.txt'

(java.security.AllPermission <all permissions> <all actions>)

所以它可以访问目录,也有所有的权限。

正如我所说,在我的本地机器上运行良好(一台 Win 7 机器)。服务器似乎无法创建文件。但是可以登录查看路径是否为目录,服务器为Win 2008机器。

命令 net use I: \\<serverName>\myDirectory <pw> /user:<domain\user> 在两台机器上都有一个有趣的地方工作正常,并允许在其中创建文件。

我的想法是服务器的响应时间太长,jcifs 将其关闭,因此我更改了超时值:

    System.setProperty("jcifs.smb.client.responseTimeout", "120000"); // default: 30000 millisec.
System.setProperty("jcifs.smb.client.soTimeout", "140000"); // default: 35000 millisec.

最佳答案

尝试使用 IP 地址代替服务器名称。我有同样的问题并使用 IP 地址得到修复

full path = 'smb://<IPaddress>/myDirectory/test.txt'

关于java - JCIFS - 连接中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24912430/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com