ich hab hier ne wacklige wurstlösung zusammen-gelümmelt (bin noch nich sehr mit der netzwerk-materie vertraut)
client schickt ordner zu server!
-> server starten - server wartet
-> client starten 
-> server will zielordner wissen, dann
-> client meldet sich als verbunden - und will zu verschickenden ordner wissen
...übertragung...programme beenden sich
-keine fenster nur requester
leere (unter-)ordner/pfade werden leider nicht kopiert, sondern nur welche, in denen sich in irgendeiner tiefe ne datei befindet.
über loopback gings ganz gut. zu einem LAN computer nich ganz so (unser LAN hier ist aber prinzipiel nicht ganz zuverlässig). weiter draussen kann ichs nicht testen.
naja...
server
Code: Alles auswählen
;SERVER_folder_receive.pb
Declare ensurePath(path.s)
If InitNetwork()=0 : :MessageRequester("error","Server - initnetwork failed"):End : EndIf
Port = 6832
Buffer = AllocateMemory(1000)
If Buffer=0 ::: MessageRequester("error","Client - malloc failed"):End ::: EndIf
If CreateNetworkServer(0, Port)=0 : :MessageRequester("error","creating server failed"):End : EndIf
Repeat
  SEvent=NetworkServerEvent()
  If SEvent
    ClientID=EventClient()
    Select SEvent
    
      Case 1
        destinationPath$=PathRequester("Server - choose destination folder", "C:\Dokumente und Einstellungen\mo\Desktop\dest")
        If destinationPath$
          PokeS(Buffer,":OK:")
          SendNetworkData(ClientID, Buffer,10)
        Else
          MessageRequester("error","Server - invalid path")
          PokeS(Buffer,":ERROR:")
          SendNetworkData(ClientID, Buffer, 10)
          End
        EndIf
        
      Case 2
        ReceiveNetworkData(ClientID, Buffer, 4) : len.l=PeekL(Buffer)
        ReceiveNetworkData(ClientID, Buffer, len )
        file$=PeekS(Buffer,len)
        
      Case 3
        If ensurePath(destinationPath$+GetPathPart(file$))
          ReceiveNetworkFile(ClientID, destinationPath$+file$)
        Else
          Debug "ensurePath failed: "+destinationPath$+" "+file$
        EndIf
       
      Case 4
        Quit = 1
    EndSelect
  EndIf
  Delay(1)
Until Quit = 1 
CloseNetworkServer(0)
RunProgram("explorer.exe", destinationPath$,destinationPath$)
End
Procedure ensurePath(path.s)
  Protected i
  If path
  Else
    ProcedureReturn  0
  EndIf
  
  If FindString(path,"\",Len(path))=0
    path+"\"
  EndIf    
  
  i=FindString(path, "\", i+1)
  While i
    If ExamineDirectory(1, Left(path,i), "*.*")=0
      If CreateDirectory( Left(path,i) )=0
        ProcedureReturn  0
      EndIf
    Else
      FinishDirectory(1)
    EndIf
    i=FindString(path, "\", i+1)
  Wend
  ProcedureReturn 1
EndProcedure
 
client
Code: Alles auswählen
;CLIENT_folder_send.pb
Declare getFileList(dirName.s, files.s() )
Declare waitOK()
NewList files.s()
If InitNetwork()=0 ::: MessageRequester("error","Client - initnetwork failed"):End ::: EndIf
Port = 6832
Buffer = AllocateMemory(1000)
If Buffer=0 ::: MessageRequester("error","Client - malloc failed"):End ::: EndIf
ConnectionID=OpenNetworkConnection("127.0.0.1", Port)
;ConnectionID=OpenNetworkConnection("192.168.1.33", Port)
;ConnectionID=OpenNetworkConnection("192.168.1.37", Port)
If ConnectionID
  waitOK()
  MessageRequester("Client", "Client connected to server...", 0)
  path.s=PathRequester("Client - choose folder to send", "E:\")
  If path
  Else
    MessageRequester("error","Client - invalid path")
    CloseNetworkConnection(ConnectionID)
    End
  EndIf
  getFileList(path, files() )
  
  iFolder=Len(path)-1
  While Mid(path, iFolder, 1) <> "\" ::: iFolder-1::: Wend
  iFolder+1
  ForEach files()
    relativePath$=Mid(files(), iFolder, Len(files()) )
    len.l=Len(relativePath$)
    SendNetworkData(ConnectionID, @len, 4 )
    SendNetworkData(ConnectionID, @relativePath$, len )
    SendNetworkFile(ConnectionID, files())
  Next
  CloseNetworkConnection(ConnectionID)
Else
  MessageRequester("Client", "NOT connected to server - exit program...", 0)
EndIf
End
Procedure waitOK()
  Shared ConnectionID
  Shared Buffer
  Repeat
    CEvent=NetworkClientEvent(ConnectionID)
    Delay(1)
  Until CEvent=2
  ReceiveNetworkData(ConnectionID, Buffer, 10)
  If PeekS(Buffer,10)=":OK:"
    ;
  Else
    MessageRequester("error","Client - transfer failed")
    CloseNetworkConnection(ConnectionID)
    End
  EndIf
EndProcedure
Procedure getFileList(dirName.s, files.s() )
  If dirName
    If FindString(dirName, "\", Len(dirName) )=0 :: dirName+"\" :: EndIf
    dir=ExamineDirectory(#PB_Any, dirName, "*.*")
    If dir
      While NextDirectoryEntry(dir)
        name$=DirectoryEntryName(dir)
        Select DirectoryEntryType(dir)
          Case 2
            If name$<>"." And name$<>".."
              getFileList( dirName+name$, files() )
            EndIf
          Case 1
            AddElement( files() )
            files()=dirName+name$
        EndSelect
      Wend
      FinishDirectory(dir)
    EndIf
  EndIf
EndProcedure