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