【问题标题】:Android SDK : How to search samba server in my LAN?Android SDK:如何在我的局域网中搜索 samba 服务器?
【发布时间】:2014-01-08 02:22:58
【问题描述】:

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

【问题讨论】:

    标签: java android samba


    【解决方案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 服务器了。

    【讨论】:

      【解决方案2】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-13
        • 2016-10-31
        • 2017-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-30
        • 2017-06-24
        相关资源
        最近更新 更多