Android SDK:如何在我的局域网中搜索samba服务器?

时间:2014-01-08 02:22:59

标签: java android samba

我知道如何通过jcifs访问samba文件,并用它来实现列表文件,上传,下载.....
但我想自动搜索局域网中的samba服务器 我怎样才能做到这一点?请帮我 。非常感谢

2 个答案:

答案 0 :(得分:1)

您可以访问LAN ip并检查它是否为server.like 192.168.0.0到192.168.0.255。如果你检查使用中的IP,那么你可以检查它的端口。 Samba端口是445,因此您可以检查192.168.0.0:455是否可用,如果它可用,那么它是一个samba服务器。完成检查0~255后,可以在局域网中搜索samba服务器。

答案 1 :(得分:0)

复杂化: - /这是更好的解决方案:

private class NetworkUsers  extends AsyncTask<String, String, String> {
    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        // your code, thats runs before "doInBackground" action
    }

    @Override
    protected void onPostExecute(String result) {
        // your code, thats runs after "doInBackground" action

        if(result != null){ 
            // handle "result" String
        } else {

        }
    }

    @Override
    protected String doInBackground(String... params) {
        SmbFile[] domains = null;
        String result = null;
        String url = params[0];
        SmbFile path = null;
        try {
            path = new SmbFile(url);
            try {
                if(path.exists()){
                    result = ""; // set result variable to empty
                    domains = (new SmbFile(url)).listFiles();
                    for (int i = 0; i < domains.length; i++) {
                        // here you can add custom validations
                        // for example if(domains[i].isHidden()){} | example if(domains[i].canRead()){} , etc.
                        result +=  domains[i].toString() + "\n";
                    }   
                }
            } catch (SmbException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (MalformedURLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        return result;
    }       
}

使用方法:

列出根目录上的所有网络设备:

(new NetworkUsers()).execute("smb://");

列出设备内容:

(new NetworkUsers()).execute("smb://my-device/shared/"); //my-device is the network device name