0

Android用のsambaクライアントに取り組んでいます。IP アドレスを指定すると、それに接続して共有フォルダーを参照する必要があります。

これにはJCIFSを使用します。Android プロジェクトに jar をドロップし、次のコードを追加して PC に接続し、ファイルのリストを取得しました。

private void connectToPC() throws IOException {
    String ip = "x.x.x.x";
    String user = Constants.username + ":" + Constants.password;
    String url = "smb://" + ip;

    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(user);
    SmbFile root= new SmbFile(url, auth);

    String[] files = root.list();
    for (String fileName : files) {
        Log.d("GREC", "File: " + fileName);
    }
}

jcifs.smb.SmbAuthException : Logon failure: unknown user name or bad password.

しかし、資格情報は正しいです。JCIFSを使用するAndroidマーケットの別のsambaクライアントでも試してみたところ、そのIPに正常に接続されたので、明らかにここで何か間違ったことをしていますが、特に何がわかりません。

どんな助けでも大歓迎です。

4

3 に答える 3

1

たぶん私も他の人を助けることができます。

Runnable で Smb-Code を実行するために、thread.start() の代わりに thread.run() を使用するという問題がありました。答えを探すのに多くの時間を費やしましたが、問題を解決するものは何もありませんでした。

しかし、その後、友人が thread.run() と thread.start() の違いを説明してくれました。

run(): 通常のメソッドのように Methode (Runnable の run() Methode など) を実行します (同期)。

start(): 独自のタスクで Runnable を使用してスレッドを開始します (非同期)

Smb の場合、非同期スレッドが必要です。このため、thread.start() を呼び出す必要があります。

誰かが私と同じ間違いをするかもしれません。

于 2014-01-29T08:58:47.673 に答える
1

やっとPCとの接続に成功。問題はコンストラクターにあることが判明しましたNtlmPasswordAuthentication();

したがって、これの代わりに:

String user = Constants.username + ":" + Constants.password;
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(user);

私はこれに変更しました:

NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("",
                    Constants.username, Constants.password);

理由はわかりませんが、おそらく「:」特殊文字が原因で、おそらくAndroidが原因ですが、空のドメイン名、ユーザー名、およびパスワードをコンストラクターに個別に渡すことで、問題は解決しました。

于 2013-03-20T12:33:15.257 に答える