Aktuelle Zeit: 04.07.2020 11:44

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: PDF mit Base64Encoder versenden
BeitragVerfasst: 27.06.2019 15:38 
Offline

Registriert: 19.10.2014 15:51
Ich möchte gerne eine PDF Datei mit Base64 encoden, via TCP an einen Client senden und dann mit Base64Decoder wieder entpacken und öffen.
Aber ich check das einfach nicht.
Kann mir jemand einen Tip geben, noch besser ein Beispiel, wie ich eine PDF encode?



So funktioniert es jedenfalls NICHT:
Code:




file$ = OpenFileRequester("Datei auswählen...","*.*","*.*",0)
If file$
  If ReadFile(0, file$)
    length = Lof(0)                            ; Länge der geöffneten Datei ermitteln
    *MemoryID = AllocateMemory(length)         ; Reservieren des benötigten Speichers
    If *MemoryID
      bytes = ReadData(0, *MemoryID, length)   ; Einlesen aller Daten in den Speicherblock
                                               ;Debug "Anzahl der gelesenen Bytes: " + Str(bytes)
     
      pdf$=PeekS(*MemoryID ,bytes)
     
    EndIf
    CloseFile(0)
  EndIf
EndIf


Encoded$ = Base64Encoder(*MemoryID, MemorySize(*MemoryID))
; Debug "Encoded: " + Encoded$

*DecodedBuffer = AllocateMemory(1024)
Base64Decoder(Encoded$, *DecodedBuffer, 1024)
;Debug "Decoded: " + PeekS(*DecodedBuffer, -1, #PB_UTF8)
pdf2$=PeekS(*DecodedBuffer, -1, #PB_UTF8)



OpenWindow(1,0,0,1400,800,"Test")
WebGadget(2,10,10,800,600,pdf2$)




Repeat
 
Until WaitWindowEvent()=#PB_Event_CloseWindow



_________________
Ich programmiere plattformunabhängig und suche immer Lösungen für alle Plattformen.
Win 7/10, Linux Mint Cindy 3 (Debian), Mint 18.3 / 19.1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PDF mit Base64Encoder versenden
BeitragVerfasst: 27.06.2019 20:12 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Sorry,

ich sehe hier nur Müll.

- Binärdaten von Datei laden und mit Peeks dann versuchen als String zu übernehmen. Geht gar nicht.
- Was hat ein WebGadget mit Daten über Netzwerk zu Senden und empfangen zu tun. Überhaupt nichts.

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PDF mit Base64Encoder versenden
BeitragVerfasst: 27.06.2019 22:32 
Offline
Benutzeravatar

Registriert: 08.03.2013 14:27
Wohnort: ERB
Und Warum unbedingt Base64? Du kannst doch die Datei direkt als Bytestream versenden. Mit Base64 kann das Datenvolumen bis zu 35 % größer sein als die Datei. Ich sehe kein Grund für Base64.

_________________
USAC Protokoll
Universal Stringbased Application Communication Protocoll

Github: Zum Spezifikationdokument v0.01


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PDF mit Base64Encoder versenden
BeitragVerfasst: 05.07.2019 16:29 
Offline

Registriert: 19.10.2014 15:51
Herrlich!
Vielen Dank für euch überaus freundliche Hilfe!

_________________
Ich programmiere plattformunabhängig und suche immer Lösungen für alle Plattformen.
Win 7/10, Linux Mint Cindy 3 (Debian), Mint 18.3 / 19.1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PDF mit Base64Encoder versenden
BeitragVerfasst: 05.07.2019 16:41 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Das mit dem Webgadget verstehe ich aber auch nicht.

@mk-soft: Wir sind hier im Anfängerforum. Da darf man ruhig etwas netter sein. :wink:

@stevie1401:
Wenn du Binärdaten in einen Speicherbereich lädst, kannst du genau diesen Speicherbereich zusammen mit Base64Encoder() nutzen, also nach dem ReadData() musst du dann nur noch *MemoryId und length in den Befehl werfen und er spuckt dir die Bas64-kodierten Daten aus. PeekS() hat da nichts verloren, weil es für Strings gedacht ist und nicht für Binärdaten. Und wenn Base64Decoder() fertig ist, solltest du wieder FreeMemory() nutzen.

Wohin sollen die Daten dann eigentlich gesendet werden?

_________________
Ubuntu Gnome 20.04 LTS x64, PureBasic 5.72 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60, 5.71b2)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PDF mit Base64Encoder versenden
BeitragVerfasst: 05.07.2019 17:12 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
stevie1401 hat geschrieben:
Herrlich!
Vielen Dank für euch überaus freundliche Hilfe!

anstelle dieses Kommentares hättest Du die Gelegenheit nutzen können, ein wenig Licht ins Dunkle zu bringen, denn offensichtlich weiß hier niemand so genau, was Du überhaupt vorhast.

_________________
Schrödingers Smiley :):


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PDF mit Base64Encoder versenden
BeitragVerfasst: 05.07.2019 17:35 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Du redest auch davon, dass du die Daten an einen Clienten senden möchtest. Damit jemand dein Client sein kann, musst du zunächst mal einen Server starten, das geht mit CreateNetworkServer(). Aber das wird dann alles schon wieder eine ganze Ecke komplexer. Ich warte erst mal auf deine genauere Beschreibung des Problems.

_________________
Ubuntu Gnome 20.04 LTS x64, PureBasic 5.72 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60, 5.71b2)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PDF mit Base64Encoder versenden
BeitragVerfasst: 06.07.2019 11:56 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Sorry,

aber nach fünf Jahren mit PB sollten so Fehler wie Binärdaten mit PeekS lesen nicht mehr passieren...

Bitte nicht böse sein

Server und Client Lösungen:

Daten über Netzwerk zu übertragen ist mit PB kein Problem.

Aber man muss wissen wie dieses mit TCP funktioniert und welche Einschränkungen es gibt.
Das TCP Protokoll erledigt dir das überprüfte übertragen von Daten bis zu 64 kBytes.
Diese werden auf kleinere Pakete aufgeteilt und kommen bis 64 kByte auch in der richtigen Reihenfolge an.

Aber nicht in einem Stück zu Deinem Programm, sondern als mehrer Pakete.
Somit muss man selber programmieren das die Daten vollständig angekommen sind.
Es kann auch passieren das im Fehlerfall nicht alle Daten ankommen. Dieses muss Dein Programm auch selber auswerten.

Die Lösung ist auf TCP Protokoll (ISO-Model bis Schicht 4) ein eigenes Protokoll zu setzen (ISO-Model Schicht 5+)
Diese macht auch zum Beispiel Http, FTP, etc...

Somit lässt man sich also ein eigenes Protokoll was auf dem TCP-Protokoll aufsetzt einfallen.

Diese muss Du dir aber nicht mit sehr vielen Stunden Arbeit selber erarbeiten. Das haben andere hier im Forum für dich erledigt.
Du möchtest das nur die Daten übertragen und diese dann anzeigen oder weiterleiten.

Hier zum Module NetworkTCP um Daten auch über 64 kBytes zu übertragen.
Link: viewtopic.php?f=8&t=31321

Es gibt auch noch andere sehr gut implementierte Protokolle hier im Forum die dir die Arbeit erleichtert.

Alles Gute und viel erfolg.

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PDF mit Base64Encoder versenden
BeitragVerfasst: 07.07.2019 09:43 
Offline

Registriert: 19.10.2014 15:51
Nun, falls die Aufgabenstellung nicht klar ist, dann hier gerne noch einmal:
Ich möchte gerne eine PDF Datei mit Base64 encoden, via TCP an einen Client senden und dann mit Base64Decoder wieder entpacken und öffen.
Dass ich Base64 benutzen möchte hat natürlich seinen Grund. Ich habe nicht gesagt, dass ich die PDF Datei mit einem Purebasuc-Client empfangen möchte.
Ich möchte dies mit einem Spiderbasic-TCP-Socket-Client empfangen.
Insofern mag das für den geneigten Leser etwas verwirrend gewesen sein. Das war natürlich nicht meine Absicht.
Ich war mir nur nicht sicher, ob ich meine Frage nun ins Purebasic-Forum oder in die Abteilung Spiderbasic legen sollte.
Ich habe mich für die Anfängerabteilung von Purebasic entschieden, in der Hoffnung, hier leicht verständliche Antworten zu bekommen.

Also noch einmal genauer erklärt:
Ich habe einen Purebasic-Websocket-Server, der einem Spiderbasic-Websocket-Client eine PDF-Datei senden soll. Diese soll dann mit Spider mit Base64 empfangen und anschliessend geöffnet werden.

Ich habe mir übrigens auch das TCP-Beispiel angesehen und getestet.
Ich denke, es liegt am TCP selbst, dass es unfassbar lange dauert, bis man grössere Strings vom Server zum Client gesendet hat. Bei einem Teststring von ca 2,5 MB, braucht es weit über 1 Minute,bis alles angekommen ist. Selbst wenn Server und Client auf dem selben Rechner sind. Das entfällt also.

_________________
Ich programmiere plattformunabhängig und suche immer Lösungen für alle Plattformen.
Win 7/10, Linux Mint Cindy 3 (Debian), Mint 18.3 / 19.1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PDF mit Base64Encoder versenden
BeitragVerfasst: 07.07.2019 11:44 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
stevie1401 hat geschrieben:
Ich denke, es liegt am TCP selbst, dass es unfassbar lange dauert, bis man grössere Strings vom Server zum Client gesendet hat. Bei einem Teststring von ca 2,5 MB, braucht es weit über 1 Minute,bis alles angekommen ist. Selbst wenn Server und Client auf dem selben Rechner sind. Das entfällt also.


Dies ist so nicht richtig.
Wenn es bei dir solange dauert, liegt es an der Internetgeschwindigkeit die gerade anliegt, oder an deiner Sende-, und Empfangstechnik.
Dem TCP-Protokoll ist es egal ob es sich um Strings handelt ;)

In den meisten Fällen ist es die Uploadgeschwindigkeit, oder aber das zu viele kleine Pakete verschickt werden.

_________________
PureBasic 5.72 LTS (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce RTX 2080 Super | HAF XF Evo​​


Zuletzt geändert von Bisonte am 07.07.2019 20:50, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye