2013-03-26 38 views
1

您好我已經創建了一個測試程序來連接samba協議。我的動機是爲了上的共享位置創建一個test.txt文件像String path="smb://192.168.143.134/rtf2xml/"+sharedFolder+"/test.txt";與java的Samba連接

但是當我嘗試運行我的程序(下面是代碼示例)

import java.io.IOException; 

import jcifs.smb.NtlmPasswordAuthentication; 
import jcifs.smb.SmbFile; 
import jcifs.smb.SmbFileOutputStream; 


public class Test { 

    /** 
    * @param args 
    * @throws IOException 
    */ 
    public static void main(String[] args) throws IOException { 
     String user = "abc"; 
     String pass ="123456"; 

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

} 

它拋出異常

Exception in thread "main" jcifs.smb.SmbException: Failed to negotiate 
jcifs.smb.SmbException: Timeout trying to open socket 
java.net.ConnectException: Connection refused: connect 
    at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at jcifs.netbios.NbtSocket.<init>(NbtSocket.java:59) 
    at jcifs.smb.SmbTransport.run(SmbTransport.java:342) 
    at java.lang.Thread.run(Unknown Source) 

    at jcifs.smb.SmbTransport.start(SmbTransport.java:315) 
    at jcifs.smb.SmbTransport.negotiate0(SmbTransport.java:865) 
    at jcifs.smb.SmbTransport.negotiate(SmbTransport.java:941) 
    at jcifs.smb.SmbTree.treeConnect(SmbTree.java:119) 
    at jcifs.smb.SmbFile.connect(SmbFile.java:827) 
    at jcifs.smb.SmbFile.connect0(SmbFile.java:797) 
    at jcifs.smb.SmbFile.open0(SmbFile.java:852) 
    at jcifs.smb.SmbFile.createNewFile(SmbFile.java:2265) 
    at Test.main(Test.java:22) 

    at jcifs.smb.SmbTransport.negotiate(SmbTransport.java:947) 
    at jcifs.smb.SmbTree.treeConnect(SmbTree.java:119) 
    at jcifs.smb.SmbFile.connect(SmbFile.java:827) 
    at jcifs.smb.SmbFile.connect0(SmbFile.java:797) 
    at jcifs.smb.SmbFile.open0(SmbFile.java:852) 
    at jcifs.smb.SmbFile.createNewFile(SmbFile.java:2265) 
    at Test.main(Test.java:22) 

如何擺脫這個?

回答

0
  1. 但我認爲你必須確保目標服務器(192.168.143.134)啓動並運行。

  2. 您可以通過以下方式編寫它,因爲smb鏈接中包含IP。

    public static void main(String[] args) throws IOException { 
    String user = "abc"; 
    String pass ="123456"; 
    
    String sharedFolder="INPUT"; 
    String path="smb://192.168.143.134/rtf2xml/"+sharedFolder+"/test.txt"; 
    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("",user, pass);//note here 
    SmbFile smbFile = new SmbFile(path, auth); 
    smbFile.createNewFile(); 
    SmbFileOutputStream smbfos = new SmbFileOutputStream(smbFile); 
    smbfos.write("testing....and writing to a file".getBytes()); 
    System.out.println("completed ...nice !"); 
    

    } ....