【发布时间】:2014-01-08 02:22:58
【问题描述】:
我知道如何通过jcifs访问samba文件,并用它来实现列表文件,上传,下载.....
但我想在我的局域网中自动搜索 samba 服务器。
我怎样才能做到这一点?请帮我 。非常感谢
【问题讨论】:
我知道如何通过jcifs访问samba文件,并用它来实现列表文件,上传,下载.....
但我想在我的局域网中自动搜索 samba 服务器。
我怎样才能做到这一点?请帮我 。非常感谢
【问题讨论】:
您可以访问 LAN ip 并检查它是 server.like 192.168.0.0 到 192.168.0.255。如果您检查使用中的ip,那么您可以检查它的端口。 Samba 端口是 445,因此您可以检查 192.168.0.0:455 是否可用,如果它可用,那么它是一个 samba 服务器。当你检查完 0 ~ 255 后,你就可以在局域网中搜索 samba 服务器了。
【讨论】:
复杂化:-/这里是更好的解决方案:
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
【讨论】: