Mini Chat - Austausch von Nachrichten
Also, wenn ich Daten egal welchen typs übertragen will, dann kopiere ich einfach den Inhalt eines Buffers des Senders in den Buffer des Empfängers (und mss natürlich selbst drauf achten, welcher Datentyp da gerade empfangen wurde).
Dieses Verfahren geht am besten mit Send/ReceiveNetworkData().
Habe ich das jetzt richtig verstanden? *lieb
guck*
Dieses Verfahren geht am besten mit Send/ReceiveNetworkData().
Habe ich das jetzt richtig verstanden? *lieb

PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
@and51
richtig.
@stromberg
das * ist teil des variablennamens (also kein operator oder so) und ist eigentlich nur eine kennzeichung für den programmierer, um die verwendung der variablen als adressspeicher (pointer) zu identifizieren:
das @ hingegen ist der adressoperator, der, vor den namen einer variable geschrieben, ihre adresse zurückgibt.
richtig.
@stromberg
das * ist teil des variablennamens (also kein operator oder so) und ist eigentlich nur eine kennzeichung für den programmierer, um die verwendung der variablen als adressspeicher (pointer) zu identifizieren:
Code: Alles auswählen
n.b=127
*p=@n
Debug PeekB(*p) ;=127
;es geht auch so, mit einer gewöhnlichen longvariable
p.l=@n
Debug PeekB(p) ;=127
Ja! Ja! Jaaaaaaaaaa! Jahuuuuuuuuu!#NULL hat geschrieben:@and51
richtig.


PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
lol ... das lachen konnt ich mir jetzt nicht verkneifen#NULL hat geschrieben:wenn du so was versendest:und so empfängst:Code: Alles auswählen
n.w=257 SendNetworkData(ConnectionID, @n, 4)
dann erhältst du "1" als ausgabe, also das zweite byte (der zahl 257). würd gern mal wissen ob die bytes schon im speicher im big-endian liegen, oder erst im big-endian versendet werden.(?)Code: Alles auswählen
ReceiveNetworkData(ClientID, Buffer, 1000) MessageRequester( "sent", Str(PeekB(Buffer)), 0)
//...liegt scheinbar am versenden

Du sendest vier Byte ... aber ein Word hat nur zwei Byte

hast du AND davor hingewießen? *grins* löl
Ansonnsten sollte nicht eine 1 zurück geleifert werden, sondern eine 2 bzw
bei deinem beispiel eine 4 ... da du ja 4 Byte versendest

Pointer:
Das was du über das Sternchen und den Klammeraffen schreibst stimmt
so nicht ganz. Das * wird bei der Deklaration benutzt und gehört bei PB
dann bei Variablen zum Namen. Bei Strukturen ist das nicht der Fall!
Beispiel:
Code: Alles auswählen
Structure Zeiger
X.l
Y.l
*Z.Zeiger
EndStructure
Test.Zeiger
Test\Z = AllocateMemory(SizeOf(Zeiger))

Das @ Zeichen verwendest du bei bereits vorhanden Variablen, um deren
Speicheradresse raus zu bekommen. Es gibt auch ein Tutorial zu Pointern,
aber den Link kenn ich nicht auswendig. Irgend wer aus dem Forum hier
hat das mal geschrieben ... müsst nur mal nach suchen

MFG PMV
das war natürlich nicht ganz korrekt, aber auch wenn du nur 2 bytes versendest erhältst du in dem beispiel "1" als ausgabe! (das höherwertige byte ist 1 im gesamten bereich von 256...511:PMV hat geschrieben:Du sendest vier Byte ... aber ein Word hat nur zwei Byte Wink ... do drauf
hast du AND davor hingewießen? *grins* löl
00000001 00000000 (256)
00000001 11111111 (511)
?!?!?bei deinem beispiel eine 4 ... da du ja 4 Byte versendest![]()

wenn du aber weniger bytes einer variable versendest, als ihr typ besitzt. ist das viel fataler, da ja nur eine teilmenge des wertebereichs versendet wird und du auf empfängerseite keine chance mehr hast, den inhalt der ursprünglichen variablen zu ermitteln.
bezüglich der strukturen hast du recht.
ein tut zu pointern gibt's hier.
