ich hab ein etwas anderes problem und zwar wenn der server eine datei an einen clienten schickt... so der client geht ja seine schleife durch bis er mittels NetworkClientEvent(Verbindung) gemeldet bekommt das eine datei bereit zum empfangen ist. wenn der client die datei jetzt speichern will aber aus irgend einem grund nicht kann... dann meldet NetworkClientEvent(Verbindung) die ganze zeit wieder das eine datei zum empfangen bereit ist.
Also wie verhindere ich das er immer wieder die meldung bekommt?
ich bin da nicht mehr ganz drin, aber ich glaube, das geht mit dem Standartsatz von PB nicht. Am Besten programmierst du das selber über SendNetworkData().
Hmm... aber das ist ja dann eine Lücke, die jedes Serverprogramm blockiert, wenn es die Datei nicht empfangen will. Selbst wenn man das Serverprogramm mit ReceiveNetworkData schreibt kann irgendjemand mal eine Datei senden und der Server wird für alle Clients nie wieder reagieren. Man müsste als Workaround das Serverprogramm automatisch neustarten, alle Clients neu verbinden, sobald eine Datei reinkommt. Dazu braucht man dann aber zwei Serverprogramme.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
wenn der Server nicht bekommt, was er erwartet, kann er da nicht einfach die Verbindung zu diesem Client schließen.
Ein Server muss doch nicht alles akzeptieren. Kann er nicht einfach den Client ablehnen (Verbindung schließen), wenn dieser sich nicht an die Spielregeln hält?
lg,
guido
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Mehr oder minder geht das.
Ich SendNetzworkData() und .... File() ist das selbe. Gibt nur einen Unterschied, das ich glaube 8 Bytes zusätzlich versendet werden.
Das bedeutet, das der selbe Vorgang und Speicher genutzt wird und daher beides gleich behandelt werden muß.
Wenn du mit "sendnetworkdata()" Etwas sendest und der Empfänger es nicht ausliest, dann kommt hier auch immer wieder eine Meldung (soweit ich mich erinnere), aber auf jeden Fall bleibt im Speicher logischer Weise der Datensatz vorhanden. Welcher der beiden Funktionen du nutzt, solange die Daten nicht ausgelesen werden, geht es nicht weiter. ob per ...data() oder per ...file(), liest du nicht aus, bleibt die Verbinung blockiert. ganz einfach. Der Buffer ist dann halt voll.
Da ab der aktuellen Betaversion endlich die SendNetworkFile() komplett entfert ist (soweit ich gelesen habe), sollte die Funktion eh keiner mehr nutzen.
Unanhängig von dem obigen, ist das EMpfangsprogramm von dir programmiert? Dann gibt es doch keine Probleme. Entweder dein Programm speichert ungefragt temporär die daten (ist ja nichts gefährlich drann), eventuell verschlüsselt. Oder wie es sinnvoll wäre, du sendest die Date nicht, sondern sendest erst eine Meldung an den Empfänger in Form von "ich will dir die datei xxx senden, willst du sie annehmen und speichern", wenn er das annimmt, dann sendet dein Programm an den "Sender" (Server) die Antwort und wenn er zustimmt, dann erst sendet er die datei. Und die Annahme und Speicherung der Datei läuft dann automatisch ohne weitere nachfrage oder Speicherdialog, dies sollte schon bei der ersten Anfrage geschehen sein.