SendNetworkFile() und ReceiveNetworkFile()
SendNetworkFile() und ReceiveNetworkFile()
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.
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.
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... 

> 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.
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.

Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... 

Dazu würde ich auch gern mal die Empfehlung eines/r etablierten PB-Experten hören.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
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.
Dennoch sollte es Einheitlich sein; PB 4.00 enthält gegenüber seinen Vorgängern sehr viele Vereinheitlichungen, die ich gut finde.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
- Blackskyliner
- Beiträge: 532
- Registriert: 28.07.2005 00:54
- Wohnort: /home/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 

Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
Re: SendNetworkFile() und ReceiveNetworkFile()
Ja, denn wenn Du etwas anderes als 1 bekommst, ist die Übertragung schief gelaufen. Bastel Dir so doch so ein ähnliches Konstrukt:PBZecke hat geschrieben:Oder sollte ich SendNetworkFile() in einer zweiten Schleife einfach solange versuchen lassen, bis 1 zurückgegeben wird.
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
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."
Es gibt keine Vista-Witze. Es ist alles wahr!
Es gibt keine Vista-Witze. Es ist alles wahr!
- Blackskyliner
- Beiträge: 532
- Registriert: 28.07.2005 00:54
- Wohnort: /home/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...
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
ich hab dafür mal so eine procedure benutzt:also dann etwa in der art:
auf senderseite:
und beim empfänger:
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
auf senderseite:
Code: Alles auswählen
ForEach files()
SendNetworkFile(...)
waitOK()
Next
Code: Alles auswählen
;[...if Sevent=3...]
ReceiveNetworkFile(...)
PokeS(Buffer,":OK:") ;bzw z.b. ein PokeS(Buffer,":ERROR:") bei problemen.
SendNetworkData(ClientID, Buffer, 10)