SendNetworkString... Roh-Daten in Text umwandeln

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

SendNetworkString... Roh-Daten in Text umwandeln

Beitrag von Sunny »

Also...
Ich habe folgendes Problem, wenn mein Client mittels SendNetworkString einen String zum Server schickt, muss der Server ihn ja mit ReceiveNetworkData empangen. Jetzt weiß ich aber nicht, wie ich die Roh-Daten, die mein Server empfangen hat, wieder in den Text umwandeln kann den mein Client verschickt hat.

Ich bedanke mich schonmal im Voraus für eure Hilfe.
Benutzeravatar
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

Beitrag von ts-soft »

Code: Alles auswählen

PeekS(*DatenBuffer, DatenBufferLaenge)
Nur mal geraten :wink:
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.
Bild
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

ich würde empfehlen auf SendNetworkString zu verzichten und statt dessen alles per SendNetworkData zu verschicken.
Dort kannst du zB das erste Byte nutzen um deinem Programm mitzuteilen, ob ein String oder etwas anderes hereinkommt.
pb 4.51
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Joa, würde auch zu SendNetworkData() raten, da brauchste dann das gegenstück zu PeekS() nämlich PokeS() ;-)
(\/) (°,,,°) (\/)
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Beitrag von helpy »

In der PB Hilfe steht:
SendNetworkString() only provides a solution to quickly send strings. The string will be sent as raw data (without the terminating NULL character)
Das bedeutet, dass SendNetworkString sicher nicht mehr ist als:

Code: Alles auswählen

Procedure SendNetworkString( Connection, String.s )
  SendNetworkData( Connection, @String, StringByteLength( String ) )
EndProcedure
Ich habe es zwar nicht getestet, aber das bedeutet auch, dass die gesendeten Rohdaten entweder in Unicode oder in ASCII gesendet werden, abhängig von der Compiler-Option.

Wobei der Empfänger das String-Ende nicht erkennen kann, da das abschließende NULL-Character nicht mitgesendet wird!

Ich habe gerade eine Kommunikation aufgebaut, in der nur Strings gesendet werden, wobei ich SendNetworkData verwende und immer das NULL-Zeichen mitschicke, damit das Ende des Strings erkannt wird. Die Daten schicke ich verpackt in XML. Binärdaten (brauche ich in meiner Anwendung nicht) müsste ich kodieren, damit evt. NULL-Zeichen nicht vorkommen. Damit brauche ich keine Längenangaben mitschicken und verwende auch keine festen Paket-Größen.

cu, helpy
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Benutzeravatar
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

Beitrag von ts-soft »

helpy hat geschrieben: Ich habe es zwar nicht getestet, aber das bedeutet auch, dass die gesendeten Rohdaten entweder in Unicode oder in ASCII gesendet werden, abhängig von der Compiler-Option.
ASCII oder UTF-8, nicht Unicode!
Steht im moment noch nicht in der Hilfe, aber Fred ist dran :wink:

Deswegen ist SendNetworkString() sehr wohl nützlich, jedenfalls im Unicode-
Modus.
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.
Bild
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Beitrag von helpy »

Ahhh, d.h. SendNetworkString funktoiniert so ähnlich wie ...:

Code: Alles auswählen

Procedure SendNetworkString( Connection, String.s )
  CompilerIf #PB_Compiler_Unicode
    Protected StringUTF8.s = Space(Len(String))
    PokeS( @StringUTF8, String, -1, #PB_UTF8 )
    SendNetworkData( Connection, @String, StringByteLength( StringUTF8, #PB_UTF8 ) )
  CompilerElse
    SendNetworkData( Connection, @String, StringByteLength( String ) )
  CompilerEndIf
EndProcedure
Danke ts-soft für die Info!

cu, helpy
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Antworten