Seite 1 von 2

SendNetworkFile() und ReceiveNetworkFile()

Verfasst: 16.08.2006 18:21
von PBZecke
Hallo!

Ich bastle gerade an einem Programm um Dateien zwichen zwei Rechnern
auszutauschen. Mein Problem ist jetzt, dass entgegen der Beschreibung in
der PB-Hilfe SendNetworkFile() das Programm nicht blockiert.
RecieiveNetworkFile() dagegen schon. Wenn ich jetzt mehrere Dateien in
einer Schleife versende, verschickt SendNetworkFile() munter Dateien, die
ReceiveNetworkFile() gar nicht alle annehmen kann, da es noch beim laden
der ersten Datei ist!
Bleibt mir jetzt nur das zurücksenden einer Nachricht, dass die erste Datei
vollständig angekommen ist, damit erst dann die nächste verschickt
wird? Oder sollte ich SendNetworkFile() in einer zweiten Schleife einfach
solange versuchen lassen, bis 1 zurückgegeben wird.

Verfasst: 16.08.2006 18:56
von Joel
Du könntest die Daten einfach in einen .zip Ordner Packen und dann verschicken, dass klappt aufjedenfall!

Verfasst: 16.08.2006 19:27
von PBZecke
> Du könntest die Daten einfach in einen .zip Ordner Packen und dann verschicken, dass klappt aufjedenfall!

Das ist aber nicht wirklich eine Lösung des Problems!
Ich mach es jetzt einfach so, dass ich SendNetWorkFile() in einer
Endlosschleife so lange aufrufe, bis es 1 zurück gibt. Auf diese Weise
blockiert ja das Programm wie von mir gewünscht. Ich hoffe nur, dass das
keine Nebenwirkungen verursacht. :?

Verfasst: 16.08.2006 19:47
von AND51
Dazu würde ich auch gern mal die Empfehlung eines/r etablierten PB-Experten hören.

Verfasst: 16.08.2006 20:10
von MVXA
es bleibt dir nichts anderes übrig. Du kannst eigentlich froh sein, dass PB
eine Funktion wie Send und Receiv NetworkFile hat.

Verfasst: 16.08.2006 20:25
von AND51
Fals du mich meinst: Selbstverständlich bin ich froh darüber.

Dennoch sollte es Einheitlich sein; PB 4.00 enthält gegenüber seinen Vorgängern sehr viele Vereinheitlichungen, die ich gut finde.

Verfasst: 17.08.2006 01:09
von Blackskyliner
Machs doch einfach so: Du Sendest einen File und Setzt eine Variable auf 1 Diese Variable wird nur auf 0 Gesetzt wenn andere Server/Client einen String mit Inhalt "Fertig" o.ä. sendet und danach sendest du halt den nächsten File. Ganz einfach eigentlich... und auch relativ schön gelöst. Was anderes geht nit. Nicht immer darauf baun dasses für so simple Sachen irgendwann mal ne PB Funktion gibt ;)

Re: SendNetworkFile() und ReceiveNetworkFile()

Verfasst: 17.08.2006 01:30
von stbi
PBZecke hat geschrieben:Oder sollte ich SendNetworkFile() in einer zweiten Schleife einfach solange versuchen lassen, bis 1 zurückgegeben wird.
Ja, denn wenn Du etwas anderes als 1 bekommst, ist die Übertragung schief gelaufen. Bastel Dir so doch so ein ähnliches Konstrukt:

Code: Alles auswählen

for x = 1 to 5
  if SendNetworkFile(...) = 1
    AllesSuper = #true
    break
  endif
  Delay(2000)
  AllesSuper = #false
next

if AllesSuper = #false
 MotzMeckerSchimpf()
endif

Verfasst: 17.08.2006 01:38
von Blackskyliner
Ja aber ich glaube, dass der 1 schreibt, wenn der andere noch beim Empfangen ist oder Irre ich mich da? Ausserdem wenn ein Proxy zwischen beidem wäre dann würde das denk ich mal schiefgehen...

Verfasst: 17.08.2006 04:35
von #NULL
ich hab dafür mal so eine procedure benutzt:

Code: Alles auswählen

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
also dann etwa in der art:


auf senderseite:

Code: Alles auswählen

ForEach files()
  SendNetworkFile(...)
  waitOK()
Next
und beim empfänger:

Code: Alles auswählen

;[...if Sevent=3...]
  ReceiveNetworkFile(...)
  PokeS(Buffer,":OK:")              ;bzw z.b. ein PokeS(Buffer,":ERROR:") bei problemen.
  SendNetworkData(ClientID, Buffer, 10)