2014-07-23 6 views
4

UNC "디렉터리"에 연결하고 해당 디렉터리에 파일을 만들어야합니다. stackoverflow에서이 항목을 발견했습니다 : access to file using Java with Samba JCIFS. 좋은 점은 내 시스템에서 잘 작동한다는 것입니다,하지만 난 서버에 프로그램을 넣을 때 나는 다음과 같은 예외 얻을 :JCIFS - 연결이 끊어졌습니다.

//... 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 

생성 : 나는 다음과 같은 코드를 생성 한

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) 

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> 명령이 제대로 작동하고 거기에 파일을 만들 수 있습니다.

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

우리는이 문제를 해결하지 못했습니다. 우리는 "해결 방법"을 수행했습니다 : 서버에서 우리는 net use를 통해 영구적 인 마운트를 요청했습니다. – user2680083

+0

대상 창 공유가 DFS 공유인지 확인 했습니까? 그렇다면 파일/디렉토리를 호스트하는 해결 된/실제 서버 이름을 사용하십시오 ... – Georg

+0

@ ron190 콜론 (:) 앞에 추가 한 공백을 취소했습니다. 결장은 다른 구두점과 같이 영어로 같은 간격 규칙을 따릅니다. 공백없이, 공백없이. – tripleee

답변

2

서버 이름 대신 IP 주소를 사용하십시오 :

내 생각은 서버의 응답이 너무 오래 걸리고 JCIFS 그 이유 나는 시간 초과 값을 변경을 닫이었다. IP 주소를 사용하여 동일한 문제가 발생하여 수정되었습니다.

full path = 'smb://<IPaddress>/myDirectory/test.txt' 
관련 문제