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