SendNetworkFile() und ReceiveNetworkFile()

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

SendNetworkFile() und ReceiveNetworkFile()

Beitrag 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.
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Du könntest die Daten einfach in einen .zip Ordner Packen und dann verschicken, dass klappt aufjedenfall!
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag 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. :?
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

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
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

es bleibt dir nichts anderes übrig. Du kannst eigentlich froh sein, dass PB
eine Funktion wie Send und Receiv NetworkFile hat.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag 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 ;)
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
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Re: SendNetworkFile() und ReceiveNetworkFile()

Beitrag 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
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag 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...
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
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag 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)
my pb stuff..
Bild..jedenfalls war das mal so.
Antworten