10

我检查了 iOS 文档并在谷歌上搜索了一段时间,并得到 iOS 不支持 samba 的印象(尽管有一个用于越狱 iPhone 的 samba 应用程序)。

但是,应用程序FileBrowser是如何实现的呢?这是否意味着他们自己实现了 samba 支持?

我还发现有一个名为tango的开源库,它为 samba 提供有限的支持。所以我的问题是我能得到最好的桑巴舞支持吗?

4

4 回答 4

7

我使用 samba 包 ( http://www.samba.org ) 中的 libsmbclient 在 iOS 上进行 SMB 操作。您可以查看我的项目https://github.com/kolyvan/kxsmb(libsmbclient上的objective-c 包装器)。目前它支持一组有限的 SMB 操作。它主要用于浏览本地网络和从 SMB 共享中检索文件。

于 2013-03-30T04:44:26.603 回答
7

我花了很多时间来实现我自己的 SMB 客户端,所以我想在这里分享一些经验。

首先不要在你的生产代码中使用 tango,因为一旦你熟悉了 SMB,你就会意识到它的实现是有问题的,例如它不支持 unicode,并且在某些情况下它没有正确填充,所以你不能访问文件夹。而且我还听到人们说他们无法将window 7与它连接起来。

其次,总结一下我的经验,我发现jcifs 的人说得最好:“任何想要实施 CIFS 的人都需要知道一件非常重要的事情——“官方”CIFS 文档并不准确,也不能反映现实。没有规范. 不要相信您在 IETF 草案或 SNIA 文档中阅读的任何内容(相同的文档不同的格式)。仅将其用作提示。最终参考是您在网上看到的任何内容。

WireShark 规则!

...查看 JCIFS 以获取设计灵感,例如它如何将请求和响应按 MID 放入映射中并编码和解码帧。

然后执行以下命令:

  • SMB_COM_NEGOTIATE
    SMB_COM_SESSION_SETUP_ANDX
    SMB_COM_TREE_CONNECT_ANDX
    SMB_COM_NT_CREATE_ANDX
    SMB_COM_READ_ANDX
    SMB_COM_WRITE_ANDX
    SMB_COM_CLOSE
  • 以上所有回复“

我唯一可以补充的是,您还需要实现TRANS2_FIND_FIRST2请求/响应来查询文件夹内的文件,如果您想了解服务器公开了多少共享文件夹,您需要实现NetShareEnum请求/响应。

于 2012-01-16T03:46:39.287 回答
1

iOS 不会让您访问您可能习惯的文件系统。您可以在自己的应用程序的私有区域内读取和写入文件,仅此而已。您可能会在您的应用程序中实现另一个文件系统,但您将无法使用正常的文件操作。

我敢打赌 FileBrowser 在他们的应用程序中实现了协议,并在其之上实现了一个文件系统,例如用于访问的层。我猜您可以尝试移植现有的 samba 库或自行开发。

于 2011-11-07T03:15:55.113 回答
1

iOS 没有任何 API 可用于 SMB。但是,SMB 目前已由 Microsoft 记录,并且实施它并非不可能(尽管也不容易)。我创建了一个免费软件项目,其中包含处理 SMB 所需的大部分内容。看

https://sourceforge.net/projects/smb4ios/

于 2014-03-27T10:57:05.497 回答