【问题标题】:File transfer through SMB protocol android error通过 SMB 协议传输文件 android 错误
【发布时间】:2015-10-01 21:20:51
【问题描述】:

我想将文件从我的应用程序传输到无线 samba 设备。我编写了以下代码但无法正常工作。设备具有 ip=192.168.1.2:8181 且用户名=Admin 和密码=[空]。而设备显示完整当我尝试从我的电脑浏览器访问它时的文件。

import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

import java.io.File;
import java.io.FileOutputStream;
import java.net.MalformedURLException;

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


public class Samba extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_samba);



        Thread t = new Thread(new Runnable() {
            public void run() {
        /*
         * Do something
         */

                try {
                    String yourPeerPassword = "";
                    String yourPeerName = "Admin";
                    String yourPeerIP = "192.168.1.2:8181";

                    String smfilepath = "smb://" + yourPeerIP + "//dummy.txt.txt";

                    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(
                            null, yourPeerName, yourPeerPassword);

                    Log.e("Connected", "Yes");
                    SmbFile smbFile = new SmbFile(smfilepath, auth);
                    /** Printing Information about SMB file which belong to your Peer **/
                    String nameoffile = smbFile.getName();
                    String pathoffile = smbFile.getPath();
                    Log.e(nameoffile, pathoffile);
                    Log.e("Path", "Yes");

                    SmbFileOutputStream smbfos = new SmbFileOutputStream(smbFile);
                    smbfos.write("testing....and writing to a file".getBytes());
                    smbfos.close();
/*
                    SmbFile Dest=new SmbFile(smfilepath,auth);

                    Log.e("file", "dest");
                    downloadFileFromPeerToSdcard(Dest);
                    Log.e("after fun", "Yes");*/
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                    Log.e("MalformURL", e.getMessage());
                } catch (SmbException e) {
                    e.printStackTrace();
                    Log.e("SMBException", e.getMessage());
                }catch (Exception e) {
                    e.printStackTrace();
                    Log.e("Not Connected", e.getMessage());
                }
            }
        });

        t.start();



    }
}

日志错误:

10-05 09:47:41.220    6332-7651/loginscreen.example.com.girviapp E/Connected﹕ Yes
10-05 09:47:41.220    6332-7651/loginscreen.example.com.girviapp E/dummy.txt.txt﹕ smb://192.168.1.2:8181//dummy.txt.txt
10-05 09:47:41.220    6332-7651/loginscreen.example.com.girviapp E/Path﹕ Yes
10-05 09:47:49.897    6332-7490/loginscreen.example.com.girviapp W/System.err﹕ jcifs.smb.SmbException: Failed to connect: 0.0.0.0<00>/192.168.1.2
10-05 09:47:49.897    6332-7545/loginscreen.example.com.girviapp W/art﹕ Long monitor contention event with owner method=void jcifs.smb.SmbTree.treeConnect(jcifs.smb.ServerMessageBlock, jcifs.smb.ServerMessageBlock) from SmbTree.java:136 waiters=0 for 22.506s
10-05 09:47:49.897    6332-7490/loginscreen.example.com.girviapp W/System.err﹕ jcifs.util.transport.TransportException: Connection timeout
10-05 09:47:49.897    6332-7490/loginscreen.example.com.girviapp W/System.err﹕ at jcifs.util.transport.Transport.connect(Transport.java:174)
10-05 09:47:49.897    6332-7490/loginscreen.example.com.girviapp W/System.err﹕ at jcifs.smb.SmbTransport.connect(SmbTransport.java:307)
10-05 09:47:49.897    6332-7490/loginscreen.example.com.girviapp W/System.err﹕ at jcifs.smb.SmbTree.treeConnect(SmbTree.java:156)
10-05 09:47:49.898    6332-7490/loginscreen.example.com.girviapp W/System.err﹕ at jcifs.smb.SmbFile.doConnect(SmbFile.java:911)
10-05 09:47:49.898    6332-7490/loginscreen.example.com.girviapp W/System.err﹕ at jcifs.smb.SmbFile.connect(SmbFile.java:957)
10-05 09:47:49.898    6332-7490/loginscreen.example.com.girviapp W/System.err﹕ at jcifs.smb.SmbFile.connect0(SmbFile.java:880)
10-05 09:47:49.898    6332-7490/loginscreen.example.com.girviapp W/System.err﹕ at jcifs.smb.SmbFile.open0(SmbFile.java:975)
10-05 09:47:49.898    6332-7490/loginscreen.example.com.girviapp W/System.err﹕ at jcifs.smb.SmbFile.open(SmbFile.java:1009)

【问题讨论】:

  • 您面临的确切症状是什么而不是“不工作”?
  • 检查设备时文件内容未在设备上更新

标签: android jcifs


【解决方案1】:

您应该安装一个日志收集器应用程序来查看您是否产生了任何错误。

This 可能会有所帮助。

之后,您可以在错误日志中找到可能的原因。 如果您无法写入文件,至少应该抛出一个 IOException。

此外,仔细检查您是否没有共享文件夹名称(也就是说,您确实想写入 SMB 设备上未命名的根文件夹)可能会有所帮助,如果是,请删除后面的两个斜杠之一SMB url 中的端口(应在其之间放置共享名称)可能会有所帮助。

【讨论】:

  • 以前有没有人遇到过同样的问题
猜你喜欢
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多