Ich überprüfe iOS-Dokument und google es auch für eine Weile und habe den Eindruck, dass iOS Samba nicht unterstützt (obwohl es eine Samba-App für Jailbreak-iPhone gibt).
Aber wie erreicht die App FileBrowser das? Bedeutet das, dass sie die Samba-Unterstützung selbst implementiert haben?
Ich finde auch, dass es eine Open-Source-Bibliothek namens Tango gibt, die Samba nur begrenzt unterstützt. Also meine Frage ist, dass die beste Samba-Unterstützung ich bekommen kann?
Ich habe einige Zeit damit verbracht, meinen eigenen SMB-Client zu implementieren, daher möchte ich hier einige Erfahrungen teilen.
Verwenden Sie in Ihrem Produktionscode zunächst keinen Tango, denn sobald Sie sich mit SMB vertraut gemacht haben, werden Sie feststellen, dass seine Implementierung problematisch ist, z. Es unterstützt Unicode nicht und in einigen Fällen ist es nicht richtig auffüllen, so dass Sie nicht auf den Ordner zugreifen können. Und ich hörte auch, dass die Leute sagten, sie könnten Fenster 7 nicht damit verbinden.
Zweitens, um meine Erfahrung zusammenzufassen, finde ich jcifs Leute hatten das beste gesagt : "irgendjemand Wer die CIFS implementieren will, muss eine sehr wichtige Sache wissen - die "offizielle" CIFS-Dokumentation ist nicht korrekt und spiegelt nicht die Realität wider. Es gibt KEINE Spezifikation. Glauben Sie nichts, was Sie im IETF-Entwurf oder im SNIA-Dokument gelesen haben (das gleiche Dokument hat unterschiedliche Formatierungen). Verwenden Sie es nur als Hinweis. Die definitive Referenz ist, was auch immer Sie auf dem Draht sehen.
WireShark-Regeln!
... sehen Sie sich JCIFS für Design-Inspirationen an, z. B. wie die Anfrage und die Antwort von MID in eine Karte geschrieben werden und Frames codiert und decodiert werden.
Implementiere dann die folgenden Befehle:
Das Einzige, was ich hinzufügen kann, ist, dass Sie TRANS2_FIND_FIRST2 Anfrage / Antwort implementieren müssen, um die Dateien in einem Ordner abzufragen und herauszufinden, wie viele freigegebene Ordner der Server Ihnen zur Verfügung stellt müssen NetShareEnum Request / Response implementieren.
Ich habe libsmbclient aus dem Samba-Paket ( Ссылка ) für SMB-Operationen auf iOS verwendet. Sie können auf mein Projekt Ссылка (objective-c Wrapper auf libsmbclient) schauen. Derzeit unterstützt es eine begrenzte Anzahl von SMB-Operationen. Es wurde hauptsächlich für das Durchsuchen lokaler Netzwerk und das Abrufen von Dateien aus SMB-Freigaben entwickelt.
iOS gibt Ihnen keinen Zugriff auf ein Dateisystem, an das Sie gewöhnt sind. Sie können Dateien im privaten Bereich Ihrer eigenen App lesen und schreiben, aber das ist alles. Sie könnten möglicherweise ein anderes Dateisystem in Ihrer Anwendung implementieren, aber Sie können keine normalen Dateioperationen verwenden.
Ich würde wetten, FileBrowser implementiert das Protokoll innerhalb ihrer App und implementiert ein Dateisystem wie eine Schicht darüber für den Zugriff. Ich vermute, du könntest entweder versuchen, eine existierende Samba-Bibliothek zu portieren oder deine eigene zu rollen.
iOS hat keine APIs, um mit SMB zu arbeiten. Allerdings ist SMB derzeit von Microsoft dokumentiert und die Implementierung ist nicht unmöglich (wenn auch nicht einfach). Ich habe ein Freeware-Projekt erstellt, das die meisten Dinge enthält, die Sie für die Arbeit mit SMB benötigen. Siehe
Tags und Links iphone filesystems samba smb cifs