Recevie/Send NetworkData
Recevie/Send NetworkData
Die Funktion zum senden von Daten gibt es ja scheinbar nicht mehr. Ich brauche die jedoch trotzdem.
Habe dazu (siehe HIER) schon ein Beispiel gefunden. Das Beispiel kann aber viel zu viel. z.B. muss nicht unbedingt der Dateiname übertragen werden. Außerdem möchte ich auch nicht immer die Konsole offen haben etc. Meine Software überträgt Screenshots und daher ist das obere Beispiel einfach zu mächtig und überladen.
Ich suche eine einfache Procedure die SendNetworkFile() und ReceiveNetworkFile() implementiert, da ich diese Befehle öfters aufrufe und mein Code sonst sehr groß werden würde, wenn ich das so wie oben mache (siehe Link oben).
Gibt es eine einfache Methode, diese beiden Funktionen wieder zu implementieren?
Habe dazu (siehe HIER) schon ein Beispiel gefunden. Das Beispiel kann aber viel zu viel. z.B. muss nicht unbedingt der Dateiname übertragen werden. Außerdem möchte ich auch nicht immer die Konsole offen haben etc. Meine Software überträgt Screenshots und daher ist das obere Beispiel einfach zu mächtig und überladen.
Ich suche eine einfache Procedure die SendNetworkFile() und ReceiveNetworkFile() implementiert, da ich diese Befehle öfters aufrufe und mein Code sonst sehr groß werden würde, wenn ich das so wie oben mache (siehe Link oben).
Gibt es eine einfache Methode, diese beiden Funktionen wieder zu implementieren?
----------------------------------------------------------
PB 5.20 Beta 10 | Windows 7
PB 5.20 Beta 10 | Windows 7
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Recevie/Send NetworkData
http://forums.purebasic.com/german/view ... 75#p306462
Pakete werden nicht einfach mal so über das Netzwerk geschickt!
Mal so als Anregung: http://de.wikipedia.org/wiki/OSI-Modell
Das umstellen obigen Codes ohne Console-Ausgabe sollte doch kein Problem sein.
Der Code enthält ja nur die minimalsten Anforderungen, die an so eine Aufgabe zu stellen ist.
Gruß
Thomas
Pakete werden nicht einfach mal so über das Netzwerk geschickt!
Mal so als Anregung: http://de.wikipedia.org/wiki/OSI-Modell
Das umstellen obigen Codes ohne Console-Ausgabe sollte doch kein Problem sein.
Der Code enthält ja nur die minimalsten Anforderungen, die an so eine Aufgabe zu stellen ist.
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Recevie/Send NetworkData
Ich habs selber noch nicht benutzt, aber das hier sollte doch ein gutes Incldue sein:
EasyNetworkManager [Neu: Log - System][V# 1.3.3][Include]
EasyNetworkManager [Neu: Log - System][V# 1.3.3][Include]
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Recevie/Send NetworkData
Habe was im Englischen Forum gefunden: http://www.purebasic.fr/english/viewtop ... 13&t=52705
----------------------------------------------------------
PB 5.20 Beta 10 | Windows 7
PB 5.20 Beta 10 | Windows 7
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Recevie/Send NetworkData
Wenn es Dir nicht so wichtig ist, ob die Datei auch ankommt, ich würde das so nicht nutzen
Was machste, wenn NetworkSendFile #False zurückgibt? Neu senden bis es klappt oder einfach
verzichten.
Aber ich muß ja nicht alles verstehen.
Gruß
Thomas
Was machste, wenn NetworkSendFile #False zurückgibt? Neu senden bis es klappt oder einfach
verzichten.
Aber ich muß ja nicht alles verstehen.
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Recevie/Send NetworkData
Warum sollte ich -1 bekommen? Ist schon ziemlich unwahrscheinlich, weil dahinter SendNetworkData steht. Wenn das nicht mal funktioniert, dann gibts ein Netzwerkproblem und das Programm hat sowieso ein Problem.ts-soft hat geschrieben:Wenn es Dir nicht so wichtig ist, ob die Datei auch ankommt, ich würde das so nicht nutzen![]()
Was machste, wenn NetworkSendFile #False zurückgibt? Neu senden bis es klappt oder einfach
verzichten.
Aber ich muß ja nicht alles verstehen.
Gruß
Thomas
Die PB Funktion SendNetworkFile hat auch nur in diesem Fall -1 zurückgegeben und sonst nichts mehr gemacht.
----------------------------------------------------------
PB 5.20 Beta 10 | Windows 7
PB 5.20 Beta 10 | Windows 7
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Recevie/Send NetworkData
Solange Deine Dateien nicht grösser als 64 K sind, wird es wohl meist funktionieren.
Ich würde es in jedem Falle teilen und mit Header versehen, damit es auch bei
schlechteren Netzwerkverbindungen funktioniert. Gerade in Privathaushalten sieht
man so manche merkwürdige Verkabelung, Hubs statt Switches usw.
Für mich ist Funktion und Sicherheit wichtiger als ein paar Programmzeilen, die sich
in der Programmgrösse eher gar nicht auswirken.
Vielleicht nutzt Du es ja auch nur in Deinem lokalen Netzwerk, dann sollte es egal sein,
aber auch nur dann.
Gruß
Thomas
Ich würde es in jedem Falle teilen und mit Header versehen, damit es auch bei
schlechteren Netzwerkverbindungen funktioniert. Gerade in Privathaushalten sieht
man so manche merkwürdige Verkabelung, Hubs statt Switches usw.
Für mich ist Funktion und Sicherheit wichtiger als ein paar Programmzeilen, die sich
in der Programmgrösse eher gar nicht auswirken.
Vielleicht nutzt Du es ja auch nur in Deinem lokalen Netzwerk, dann sollte es egal sein,
aber auch nur dann.
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Recevie/Send NetworkData
Also ich sende ständig 100 KB Dateien und ich hatte bisher noch keinen Fehler..
Mich würden die Hintergründe mal Interessieren...Was müsste denn passieren, das NetworkSendFile #False zurückgibt?
Mich würden die Hintergründe mal Interessieren...Was müsste denn passieren, das NetworkSendFile #False zurückgibt?
----------------------------------------------------------
PB 5.20 Beta 10 | Windows 7
PB 5.20 Beta 10 | Windows 7
- Chimorin
- Beiträge: 451
- Registriert: 30.01.2013 16:11
- Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit
Re: Recevie/Send NetworkData
Du kannst doch nen Header machen...
Client schickt: Paketzahl = 0, Max. Anzahl an Paketen, Dateiname
Server antwortet: Dateiname, ID (Serververwaltungszeug, ne Liste für Dateien oder so)
Client: ID, Paketzahl, Max. Paketzahl, Daten
Achja, immer gleich große Pakete verwenden, dann gibt's keine Probleme.
Wenn du Zeug aus der Datei ausliest, musst du den Inhalt, auf den dein Pointer zeigt, gleich verschlüsseln (Base 64 oder so). Nun kannst du den Inhalt weiterverschicken (Grund: In Dateien finden sich auch 00 Zeichen, für die Stringleser ein String-Endzeichen).
Client schickt: Paketzahl = 0, Max. Anzahl an Paketen, Dateiname
Server antwortet: Dateiname, ID (Serververwaltungszeug, ne Liste für Dateien oder so)
Client: ID, Paketzahl, Max. Paketzahl, Daten
Achja, immer gleich große Pakete verwenden, dann gibt's keine Probleme.
Wenn du Zeug aus der Datei ausliest, musst du den Inhalt, auf den dein Pointer zeigt, gleich verschlüsseln (Base 64 oder so). Nun kannst du den Inhalt weiterverschicken (Grund: In Dateien finden sich auch 00 Zeichen, für die Stringleser ein String-Endzeichen).
Re: Recevie/Send NetworkData
Das macht der Code doch, wenn ich mich nicht total irre. Er übermittelt die Dateigröße, nicht die Paketmenge. Dateiname wird auch übertragen. Oder meinst du was anderes?Bananenfreak hat geschrieben:Du kannst doch nen Header machen...
Client schickt: Paketzahl = 0, Max. Anzahl an Paketen, Dateiname
Server antwortet: Dateiname, ID (Serververwaltungszeug, ne Liste für Dateien oder so)
Client: ID, Paketzahl, Max. Paketzahl, Daten
Code: Alles auswählen
Procedure.i NetworkSendFile(Connection.i, Filename$)
Protected Result.i, File.i, Size.q, *Buffer, Offset.i
File = ReadFile(#PB_Any, Filename$)
If File
Size = Lof(File)
Filename$ = "FILE:" + GetFilePart(Filename$) + ":" + Str(Size)
*Buffer = AllocateMemory(Size + Len(Filename$) + 1)
If *Buffer
PokeS(*Buffer, Filename$)
If ReadData(File, *Buffer + Len(Filename$) + 1, Size) = Size
If SendNetworkData(Connection, *Buffer, MemorySize(*Buffer)) = MemorySize(*Buffer)
Result = #True
EndIf
EndIf
EndIf
CloseFile(File)
EndIf
ProcedureReturn Result
EndProcedureCode: Alles auswählen
Procedure.i NetworkReceiveFile(ClientID.i, *Buffer, RcvBytes.q, Path$="")
Protected Line$, Filename$, FileSize.q, *NewBuffer, Count.i
Line$ = PeekS(*Buffer, RcvBytes)
If StringField(Line$, 1, ":") = "FILE"
Filename$ = StringField(Line$, 2, ":")
FileSize = Val(StringField(Line$, 3, ":"))
If FileSize > 0
RcvBytes - Len(Line$) - 1
If Path$ = ""
Path$ = PathRequester("Choose a directory", "")
EndIf
If Path$ <> ""
File = CreateFile(#PB_Any, Path$ + Filename$)
If File
WriteData(File, *Buffer + Len(Line$) + 1, RcvBytes)
EndIf
EndIf
Count = 0
While RcvBytes < FileSize And Count >= 0
Count = ReceiveNetworkData(ClientID, *Buffer, MemorySize(*Buffer))
If Count > 0
If IsFile(File)
WriteData(File, *Buffer, Count)
EndIf
RcvBytes + Count
EndIf
Wend
If IsFile(File)
If RcvBytes = FileSize
Result = #True
EndIf
CloseFile(File)
EndIf
EndIf
EndIf
ProcedureReturn Result
EndProcedureOb das passieren kann weiß ich nicht. Kann es sein, das der Code-Ersteller (siehe oben) das Problem schon berücksichtigt hat? Bin mir nicht sicher.Bananenfreak hat geschrieben:Achja, immer gleich große Pakete verwenden, dann gibt's keine Probleme.
Wenn du Zeug aus der Datei ausliest, musst du den Inhalt, auf den dein Pointer zeigt, gleich verschlüsseln (Base 64 oder so). Nun kannst du den Inhalt weiterverschicken (Grund: In Dateien finden sich auch 00 Zeichen, für die Stringleser ein String-Endzeichen).
----------------------------------------------------------
PB 5.20 Beta 10 | Windows 7
PB 5.20 Beta 10 | Windows 7