Netzwerk Problem oder Bug {Große Daten Versenden}
So, jetzt klappt es ja fast. Nochmal zurück zu den Code Vorher (siehe Unten), ´wenn ich das .png Bild Versende wird 1 Zurückgegeben aber das Bild wurde nur 32 Byte groß erstellt und konnte nicht geladen werden.
Wenn ich das Bild aber mit dem PB Network Beispiel Versende klappt das also ist irgentein Fehler in dem Code (Es ist schon komisch, manchmal klappt mein Programm und Manchmal nicht)Kann den Code mal einer Testen?
Ihr müsst nur ein Bild in C:\Windows\gsm.bmp speichern.
Server:
Client:
Wenn ich das Bild aber mit dem PB Network Beispiel Versende klappt das also ist irgentein Fehler in dem Code (Es ist schon komisch, manchmal klappt mein Programm und Manchmal nicht)Kann den Code mal einer Testen?
Ihr müsst nur ein Bild in C:\Windows\gsm.bmp speichern.
Server:
Code: Alles auswählen
Procedure Tool()
ClientID = EventClient()
If OpenWindow(0, 50, 100, 300, 500, "Server" , #PB_Window_SystemMenu , 0)
If CreateGadgetList(WindowID(0))
ButtonGadget(1, 10, 15, 250, 30, "Monitor Abbild")
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
Quit = 1
EndIf
If EventID = #PB_Event_Gadget
If EventGadget() = 1
ClientID = EventClient()
UsePNGImageDecoder()
UsePNGImageEncoder()
SendNetworkString(ClientID, "Desktops")
Repeat
em = ReceiveNetworkFile(ClientID, "C:\empf.png")
Until em <> 0
m = LoadImage(#PB_Any, "C:\empf.png")
SaveImage(m, "C:\save.bmp" , #PB_ImagePlugin_BMP)
LoadImage(3, "C:\save.bmp" , 0)
If OpenWindow(0, 1, 1, 1050, 730, "Arbeit" , #PB_Window_BorderLess | #PB_Window_Maximize, 0)
StickyWindow(0, 0)
If CreateGadgetList(WindowID(0))
ImageGadget(200, 1, 1, 1, 1, ImageID(3) , 0)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
EndIf
EndIf
EndIf
Until lol = 1
EndIf
EndIf
EndProcedure
Procedure Net(no.l)
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf
Port = 6880
Buffer = AllocateMemory(1000)
If CreateNetworkServer(0, Port)
Repeat
SEvent = NetworkServerEvent()
If SEvent
ClientID = EventClient()
Select SEvent
Case 1
If Tool()
EndIf
Case 3
Case 4
MessageRequester("Error", "Case 4 ist aktiv", 0)
EndSelect
EndIf
Until Quit = 1
EndIf
EndProcedure
;-----------------------------------------------------------------------------------------
prThread = CreateThread(@Net(), 456)
Repeat
If WaitThread(prThread)
abc = 5
EndIf
Until abc = 5
Client:
Code: Alles auswählen
Procedure Main(Dummy.l)
;-Vorbereiten der Netzwerk-Einstellungen
InitNetwork()
Port = 6880
;-Schleife zur Verbindungs-Herstellung
Repeat
ConnectionID = OpenNetworkConnection("127.0.0.1", Port)
If ConnectionID
EndIf
Delay(100)
Until ConnectionID <> 0
Repeat
ServerID = NetworkClientEvent(ConnectionID)
Select ServerID
Case 2
Repeat
Datenpuffer.s = Space(8)
ReceiveNetworkData(ConnectionID, @Datenpuffer, 66)
If Datenpuffer = "Desktops"
RunProgram("C:\Windows\System\loli.exe")
Delay(1100)
UsePNGImageEncoder()
image = LoadImage(#PB_Any,"C:\Windows\gsm.bmp")
If image
EndIf
If SaveImage(image, "C:\mssm.png",#PB_ImagePlugin_PNG)
EndIf
Delay(1000)
Repeat
sm = SendNetworkFile(ConnectionID, "C:\mssm.png")
Until sm <> 0
Delay(6000)
EndIf
ForEver
Case 4
MessageRequester("Error", "Case 4", 0)
End
EndSelect
Until Quit = 1
EndProcedure
;----------------------------------------------------------------------------------------
amThread = CreateThread(@Main(), 123)
Repeat
If WaitThread(amThread)
thread = 2
EndIf
Until thread = 2
FALSCH! Den Fehler hat schon jemand anders entdeckt: http://www.purebasic.fr/german/viewtopi ... file+AND51Joel hat geschrieben:Ich habe den Fehler entdeckt.
Ganz einfach, Der ReceiveNetworkFile() Befehl wartet bis die Datei gesendet wird. Aber bei SendNetworkFile() ist das anders, da wird so eine Art Verknüpfung aufgebaut und der Code wird ausgeführt. Wenn dannach dann ein "End" steht ist das Programm zu Ende und der Versand ist unterbrochen.
Du hast sogar selbst schon dort geantwortet.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
Nach wie vor finde ich, dass SendNetworkFile() auch warten sollte, bis die Datei versendet wurde.
Noch besser: Man sollte ähnlich wie bei den Packer-Befehlen einen benutzerdefinierten Callback angeben können.
Noch besser: Man sollte ähnlich wie bei den Packer-Befehlen einen benutzerdefinierten Callback angeben können.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
Ach ja und der Code sieht immer noch furchtbar aus 



ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
-
- Beiträge: 713
- Registriert: 22.03.2005 00:29
- Computerausstattung: Computer und Strom vorhanden
- Wohnort: LK Wolfenbüttel
Aber sag mal,ist das denn nicht grundlegend egal? Es gibt ja eh nur die Möglichkeit durch eine Bestätigung vom Empfänger sicher zu gehen, daß die Daten, in dem Fall die Datei, auch empfangen wurden. Und ob das nun die Sendnetworkroutine oder man selber macht ist doch egal. Klar, wenn SendNetworkFile das übernimmt, würde man sich arbeit sparen, wäre also schön, aber läuft ja genau so als ob man das selber machen würde.
Und das auch der Sender warten muß bis die Daten angekommen sind, ist doch eher lästig. Wozu ein Programm stoppen, obwohl es nicht sein muß. Es kann ja sein, daß man so stundenlang warte muß ohne zu wissen, ob die Datei noch gesendet wird oder was hängen geblieben ist.
Wie ich ja leider festellen mußte bedeutet unter Windows die Bestätigung eines erfolgreichen sendens von Daten nicht, daß diese auch empfangen wurden.
Also da kann man dann diese Überprüfung lieber selber übernehmen und den Prozess so weiter laufen lassen. Ich habe daher ganz auf SendNetworkFile() verzichten müssen.
Die Hilfedatei, die ansonsten ja nicht schlecht ist, sollte doch mal etwas verbessert werden. Da kann man noch einiges machen.
Das ständige testen, was die Funktion nun wirklich macht bzw. das fragen zu hier ist schon extrem zeitaufwendig und hält auf.
Und das auch der Sender warten muß bis die Daten angekommen sind, ist doch eher lästig. Wozu ein Programm stoppen, obwohl es nicht sein muß. Es kann ja sein, daß man so stundenlang warte muß ohne zu wissen, ob die Datei noch gesendet wird oder was hängen geblieben ist.
Wie ich ja leider festellen mußte bedeutet unter Windows die Bestätigung eines erfolgreichen sendens von Daten nicht, daß diese auch empfangen wurden.
Also da kann man dann diese Überprüfung lieber selber übernehmen und den Prozess so weiter laufen lassen. Ich habe daher ganz auf SendNetworkFile() verzichten müssen.
Die Hilfedatei, die ansonsten ja nicht schlecht ist, sollte doch mal etwas verbessert werden. Da kann man noch einiges machen.
Das ständige testen, was die Funktion nun wirklich macht bzw. das fragen zu hier ist schon extrem zeitaufwendig und hält auf.
1. Win10
PB6.1
PB6.1
- HeX0R
- Beiträge: 3040
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
SendNetworkFile() ist ohnehin nur für Gelegenheits Progger implementiert.
Wer was ernsthaftes machen will, würde es sicherlich nie verwenden und sich lieber was eigenes z'ammbasteln.
Auch mit dem erwähnten Callback, usw.
Wenn PB einem zuviel Arbeit abnimmt, werden wir eh nur alle faul, fett und gefrässig
.
Wer was ernsthaftes machen will, würde es sicherlich nie verwenden und sich lieber was eigenes z'ammbasteln.
Auch mit dem erwähnten Callback, usw.
Wenn PB einem zuviel Arbeit abnimmt, werden wir eh nur alle faul, fett und gefrässig

PB ist auch für Anfänger optimiert, d. h. ein Callback wäre eine gute Idee.
Die Hilfe erwähnt, dass die Dateien "mittels sehr spezieller und sehr sicherer Methoden" versendet werden, also warum soll auch ein "Experte/Fortgeschrittener" nicht davon Gebrauch machen können?
Warum soll der "Fehler" also nicht behoben werden, wenn man nun davon Gebrauch machen will?
Die Hilfe erwähnt, dass die Dateien "mittels sehr spezieller und sehr sicherer Methoden" versendet werden, also warum soll auch ein "Experte/Fortgeschrittener" nicht davon Gebrauch machen können?
Warum soll der "Fehler" also nicht behoben werden, wenn man nun davon Gebrauch machen will?
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
Ja, das mit dem Callback ist ne gute Idee. Aber das Problem ist ja: Wenn ich die Datei in dem Code oben Versende, wird 1 von Client und Serverseite zurückgegeben aber die Datei wurde nicht richtig gespeicher bzw. nicht richtig Verschickt (Und ist nur etwa 32 Byte groß), das hat nichts mit dem END nach dem Senden zutun.
Desswegen will ich erstmal wissen woran es liegt dass ich die Datei nicht richtig empfange bevor ich ein Callback produziere.
Das komische ist das die Datei im PB Beispiel "richtig" empfangen wird also liegts warscheinlich an meinem Code. Vielleicht Hilft es ja wenn ihr mal einen eigenen Code Veröffentlichen würdet, wie ihr ein Monitor Bild Verschicken würdet. (Und hoffentlich einen wo es klappt)
Desswegen will ich erstmal wissen woran es liegt dass ich die Datei nicht richtig empfange bevor ich ein Callback produziere.
Das komische ist das die Datei im PB Beispiel "richtig" empfangen wird also liegts warscheinlich an meinem Code. Vielleicht Hilft es ja wenn ihr mal einen eigenen Code Veröffentlichen würdet, wie ihr ein Monitor Bild Verschicken würdet. (Und hoffentlich einen wo es klappt)