German Windows Shares zugreifen

kaplanerkan

Member
Licensed User
Longtime User
Hallo,

Muss erstmal sagen, dass ich nur seit einpaar Tagen versuche unter B4A zu basteln.

Ich suche eine Möglichkeit (Zweck zum Dateilesen, Dateikopieren usw.), von einem Samsung Galaxy 10.1 Tablet aus, auf einem Windows-Rechner freigegebenem Verzeichnis zuzugreifen. Wie kann ich am besten realisieren? Mit welchen Befehlen soll/muss ich anfangen zum Lesen? Kann mir jemand einpaar Tips oder eine kleine Bespielcode geben?

Gibts vieleicht so eine Möglichkeit wie unter Visual Studio 2008 zugreifen?
"\\WindowsPC\FreigegebeneOrdner"


danke im voraus
erkaN kaplaN
 

kaplanerkan

Member
Licensed User
Longtime User
JCIFS scheint für mich richtige sein.

Hat jemand zufällig einen WRAPPER dafür?
Ich glaube ohne Wrapper kann ich nicht benutzen, oder?


gruss
erkaN
 

monki

Active Member
Licensed User
Longtime User
Hallo Roeschti,
ich hatte den Wunsch nach einer SMB Lib schon mal an Erel gepostet.
Hattest du geplant die Lib hier zu veröffentlichen?
 

kaplanerkan

Member
Licensed User
Longtime User

Roeschti

Member
Licensed User
Longtime User
Ja werde ich sicher machen, aber das dauert eine Weile, da die Lib erst so Pre-Alpha Stadium hat und wie im anderen Thread geschrieben ist sie viel zu gross dh 400kb ist schon ziemlich heftig. Zum Vergleich die OpenGL Lib ist gerade al die Hälfte.

Ich weiss nicht woran es liegt dass ich immer diesen kruden Fehler bekommen habe. Ich habe andere Libs gemacht wo ich auch div. externe Jars von anderen Leuten brauche und die funktionieren einwandfrei. Deshalb musste ich den kompletten Quelltext mit aberdutzenden von Klassen aus dem ganzen JCIFS importieren damit es ohne Fehler läuft. Nun bin ich dabei wieder alles rauszuschmeissen und eine Art light-Version zu machen, ähnlich wie das FTP Beispiel mit den grundlegenden Funktionen wie Verzeichnisse auflisten, Dateien kopieren, löschen, Verzeichnisse anlegen und löschen etc.
 

fabs222

Member
Licensed User
Longtime User
Hallo Roeschti

Ich hätte auch große Interesse an der Library.


Liebe Grüße

Fabs222
 

Roeschti

Member
Licensed User
Longtime User
Ob was passiert ist? Jaa...Arbeit....

Habe dir vor ein paar Tagen eine Mail geschickt mit allem drin, aus deiner Frage entnehme ich dass sie nicht angekommen ist. Hast du mal im Spamfilter geschaut, vielleicht wurde sie aufgrund des Anhangs als Spam gelistet?

Grüssss den Frühling
 

kaplanerkan

Member
Licensed User
Longtime User
Hallo Roeschti,

hier ist meine Testergebnisse, intensiv getestet mit 2 HTC und 1 Samsung Tablet.

Voraussetzung: Auf dem Windows-Rechner muss ein User erstellt werden und dieser User muss READ/Write-Rechte haben. Sonst fast nach jeder Befehl crasht Android-Clients.

smb.login
B4X:
  smb.login("192.168.254.2","erkan","erkanpasswort")
Login mit einem User ohne Probleme, ohne user und Passwort stützt die Android-Client ständig.


smb.isExist
Kann Dateien oder Verzeichnisse ohne Probleme kontrolieren. Hab keine Fehler feststellen können


B4X:
Dim Ver1, Ver2 As Boolean 
Ver1 = smb.isExist("smb://192.168.254.2/Backup/")        'TRUE
Ver2 = smb.isExist("smb://192.168.254.2/Backup")         'TRUE

Dim Dat1, Dat2 as Boolean
Dat1 = smb.isExist("smb://192.168.254.2/Backup/richtig.txt"      'TRUE
Dat2 = smb.isExist("smb://192.168.254.2/Backup/falsch12345.txt"     'FALSE


smb.createDir
User muss vorhanden und nötige Rechte haben, sonst crasch Android.

B4X:
If smb.isExist("smb://192.168.254.2/Backup/bakalim/") = False Then
      smb.createDir("smb://192.168.254.2/Backup/bakalim/")
End If


smb.getList
Liste der Shared-Inhalts und SubFolders sehe ich ohne Probleme, kann zugreifen oder ein Liste erstellen.

B4X:
Dim LL As List
LL = smb.getList("smb://192.168.254.2/Backup/")     
    For i=0 To ll.Size -1
      Msgbox (LL.Get(i),"")    'Name des List
   Next

oder einzelne als Object zugreifen auch kein Problem:

B4X:
Dim LL As List
Dim s as Object
LL = smb.getList("smb://192.168.254.2/Backup/")  
s = LL.Get(2)
Msgbox(s,"2")        'Zeigt 2.


smb.copyTo
innerhalb eines Shares kopieren ist kein Problem. Musste nur Timeout einstellen, wenn ich über 1000 stk kleine Dateien kopieren möchte :)

B4X:
smb.copyTo("smb://192.168.254.2/Backup/test.xml", "smb://192.168.254.2/Backup/test2.xml")

Mit Vorsichtig zu genissen, denn wenn die Target gleichen Name ist, dann crasht die Android.



smb.copyToLocal

Vom Shares nach Lokal kopieren dh zum Android-Gerät auch kein Problem.

smb.copyToLocal("smb://192.168.254.2/Backup/test.xml", File.DirRootExternal & "/test.xml")



smb.delete
Löschen die Dateien vom Server ist auch kein Problem, wenn der User nötige Rechte hat, sonst crasht die Android.

B4X:
smb.delete ("smb://192.168.254.2/Backup/bakalim/")
smb.delete ("smb://192.168.254.2/Backup/test2.xml")


smb.checkDirectory

Die Verzeichnisse kann ich auch ohne Probleme kontrolieren.

B4X:
Dim istDa1, istDa2, istDa3, istDa4 As Boolean
istDa1 = smb.checkDirectory("smb://192.168.254.2/Backup")    'TRUE
istDa2 = smb.checkDirectory("smb://192.168.254.2/Backup/")   'TRUE

istDa3 = smb.checkDirectory("smb://192.168.254.2/Backup/test1235.xml") 
'FALSE  -> Datei ist fake

istDa4 =  smb.checkDirectory("smb://192.168.254.2/Backup/test.xml")   
'FALSE -> Obwohl Datei vorhanden ist.




smb.getFileName
Was man damit machen kann, weiss ich nicht, funktioniert bei mir irgendwie nicht....


Also soweit ich gesehen habe, wenn man die Fehler empfangen kann, ist kein Problem...Am Anfang ohne User und Passwort hatte ich nur Probleme, aber mit einem User und Pass bis jetzt keine Probleme, funktioniort alles wie sein soll.


Danke und Viele Grüsse
erkaN kaplaN
 

peternmb

Active Member
Licensed User
Longtime User
Hallo kaplanerkan,

ich versuche jetzt seit 2 Tagen eine Verbindung mit einem Win7-Rechner hinzubekommen.
Da Roeschti wenig Zeit hat und es bei dir anscheinend geklappt hat, kannst du mir vielleicht mit einigen Tipps helfen.

Wird die Verbindung zum Rechner oder zum freigegebenen Verzeichis aufgebaut?
Hast du es auch mit einem Rechnernamen oder nur mit der IP-Adresse hinbekommen?
Mit welchen Betriebssystemen hast du eine Verbindung getestet/hinbekommen (XP,Win7,Server)?

Schonmal vielen Dank. Peter.
 

kaplanerkan

Member
Licensed User
Longtime User
Hallo Peternmb,

Hallo kaplanerkan,

ich versuche jetzt seit 2 Tagen eine Verbindung mit einem Win7-Rechner hinzubekommen.
Da Roeschti wenig Zeit hat und es bei dir anscheinend geklappt hat, kannst du mir vielleicht mit einigen Tipps helfen.

Wird die Verbindung zum Rechner oder zum freigegebenen Verzeichis aufgebaut?
Hast du es auch mit einem Rechnernamen oder nur mit der IP-Adresse hinbekommen?
Mit welchen Betriebssystemen hast du eine Verbindung getestet/hinbekommen (XP,Win7,Server)?

Schonmal vielen Dank. Peter.


Unsere Systeme laufen nur mit Windows XP-SP3, von daher habe ich nur mit Windows XP ausprobiert, Windows7-Erfahrung habe ich leider nicht, kann ich dir nichts sagen.

Verbindung mit Rechnernamen dauert dauert dauert ewig, deswegen hat jeder XP-Rechner eine feste IP, und die Android/WindowsCE Clienten lasse ich nur mit IP-Adressen einlogen.

Am Anfang hatte ich ähnliche Probleme, Unter XP habe ich dann "windows resource kit" installiert und GAST Account wie unten aktiviert. Seitdem kann ich ohne User-Account auch einlogen.

> net user Gast /active:yes
> ntrights +r SeNetworkLogonRight -u Gast
> ntrights -r SeDenyNetworkLogonRight -u Gast

Jetzt haben WindowsCE Clienten auch keine Probleme. Die Android Clienten sind noch nicht fertig, denn mein Program ist noch nicht fertig, aber mit meiner Test-Code/Program laufen Android-Clienten ohne Probleme; ich brauche sowieso nur Kopieren und Löschen.

Ich hole eine Datei aus dem SErver to Android Client so:
B4X:
smb.login("192.168.254.2","","")    
'Ohne User aber der Verzeichnis für jeden R/W Rechte gegeben.
Dim Dat1 as Boolean
Dat1 = smb.isExist("smb://192.168.254.2/Backup/test.xml"      'TRUE

Select Dat1
Case True
smb.copyToLocal("smb://192.168.254.2/Backup/test.xml",  _
                       File.DirRootExternal & "/test.xml") 
Case False
Msgbox ("Datei ist nicht vorhanden..Bitte versuchen Sie es später", "")
End Select

Das geht ganz schnell bei mir.


Auf dem Windows-XP-Rechner ist nur "Backup" freigegeben und der Benutzer "Jeder" hat volle R/W-Rechte.

Hoffe hilft dir weiter...
 

peternmb

Active Member
Licensed User
Longtime User
Ja vielen Dank, das hilft mir erstmal weiter.
Ich werde meine Tests jetzt solange auf XP konzentrieren, bis es zumindest da klappt.

Unter Win7 sehe ich zwar (sogar ohne Authentifizierung) alle Freigaben, schaffe es allerdings nicht darauf zuzugreifen.
Sollte eigentlich problemlos möglich sein wenn "passwortgeschützte Freigaben" dort deaktiviert sind...
 

peternmb

Active Member
Licensed User
Longtime User
Über die IP-Adresse schaffe ich es schnell und problemlos alle Freigaben anzeigen zu lassen.
Ich erhalte aber, unter XP und Win7 mit und ohne Benutzer, auf einen freigegebenen Ordner keinen Zugriff.
Am Anfang hatte ich ähnliche Probleme, Unter XP habe ich dann "windows resource kit" installiert und GAST Account wie unten aktiviert. Seitdem kann ich ohne User-Account auch einlogen.

> net user Gast /active:yes
> ntrights +r SeNetworkLogonRight -u Gast
> ntrights -r SeDenyNetworkLogonRight -u Gast
Das habe ich alles auch versucht, es ändert sich aber nichts.
Hat vielleicht jemand einen hilfreichen Tipp für mich :sign0085:
 

peternmb

Active Member
Licensed User
Longtime User
Ja, gerne.
Ich habe auch keine Ahung, ob es beim Login einen Rückgabecode gibt, ich habe zumindest nichts gefunden.


B4X:
Sub Process_Globals
  'These global variables will be declared once when the application starts.
  'These variables can be accessed from all modules.
  ...
  Dim smb As SMBuddy   
End Sub


Sub Globals
  ...
  Dim VMpfad As String  : VMpfad="Testdir"
  Dim VMip As String    : VMip="192.168.2.100"
  ...
End Sub


Sub Activity_Create(FirstTime As Boolean)
  ...
  'gespeicherte Variablen für Grundeinstellungen aus ini-Datei laden
  LoadVar 
  '
  'Datei vom Windows-Rechner holen
  HoleDatei
  '  
End Sub


Sub LoadVar
  ...
  Try
    smb.login(VMip,"","") 
      'ToastMessageShow("Verbindung zu " & VMip & " erfolgreich aufgebaut.",False)
  Catch
     Msgbox("Es konnte keine Verbindung zu " & VMip & " aufgebaut werden!","[ Problem 101 ]")
  End Try
  ...
End Sub


Sub HoleDatei
  '
  Dim LL As List
  LL = smb.getList("smb://" & VMip & "/")   
  inhalt=""
  For i=0 To LL.Size -1
    inhalt=inhalt & LL.Get(i)  & CRLF     'Inhalt der Liste
  Next
   If LL.Size = 0 Then   
     Msgbox("Unter der angegebene IP-Adresse wurden keine Freigaben gefunden", "Problem [201]")      
      Return
   End If
   '   
  Try
     smb.isExist("smb://" & VMip & "/" & VMpfad )   
  Catch
     Msgbox("Das angegebene Verzeichnis wurde nicht gefunden", "Problem [202]")      
      'Return
   End Try
   '
   Try
       smb.copyToLocal("smb://" & VMip & "/" & VMpfad & "/TestDatei.txt", File.DirRootExternal & "/TestDatei.txt") 
  Catch
     Msgbox("Es wurde keine Datei gefunden","Problem [203]")
     Return
   End Try
   '
End Sub
 
Top