netzwerk

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Killfrog
Beiträge: 12
Registriert: 20.06.2006 21:04

netzwerk

Beitrag von Killfrog »

kann man den wert einer variablen mit nem befehl über das netzwerk zum host schicken?
also einfach die variable kopieren.
oder kann man nur strings rüberschicken? :(
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Ich könnte mir vorstellen das es mit

Code: Alles auswählen

SendNetworkData(Verbindung, *SpeicherBuffer, Laenge)
geht!
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

stimmt, der befehl solle eigentlich irgendwelche zwischen-nullen ignorieren.

sende vielleicht dann besser komplette folgen von werten, anstatt jeden einzeln.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Killfrog
Beiträge: 12
Registriert: 20.06.2006 21:04

Beitrag von Killfrog »

kann mir wer n kleines beispiel zur anwendung davon geben?
bei mir klappt das irgendwie nicht /:->
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

[ich hoffe das stimmte jetzt:]

Code: Alles auswählen

varHere.b=33
SendNetworkData(Verbindung, @varHere, 1)

;oder
varHere.w=33
SendNetworkData(Verbindung, @varHere, 2)

;oder
varHere.l=33
SendNetworkData(Verbindung, @varHere, 4)

;oder
varHere.q=33
SendNetworkData(Verbindung, @varHere, 8)

Code: Alles auswählen

*buff=AllocateMemory(265)
If *buff ;....

ReceiveNetworkData(Verbindung, *buff, 256)
varThere.b=PeekB(*buff)

;oder
ReceiveNetworkData(Verbindung, *buff, 256)
varThere.w=PeekW(*buff)

;oder
ReceiveNetworkData(Verbindung, *buff, 256)
varThere.l=PeekL(*buff)

;oder
ReceiveNetworkData(Verbindung, *buff, 256)
varThere.q=PeekQ(*buff)
wobei man nätürlich keine variablen gleichen namen und verschiedenen typs deklarieren kann. 'Verbindug' ist auf beiden seiten natürlich auch verschieden.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Killfrog
Beiträge: 12
Registriert: 20.06.2006 21:04

Beitrag von Killfrog »

erstmal danke für die hilfe.... aber wie kann ich bestimmen welche variable geschickt wird?(also wie sehe ich welche grad ankommt im buffer)
sonst bekommt ja eine variable den wert von der falschen variable :?
mknjc
Beiträge: 217
Registriert: 09.09.2006 12:59

Beitrag von mknjc »

Sen dem Client doch das du jetzt Variable b senden willst und wartest noch bis er sagt das er bereit zum Empfang ist.

Also:

b.l = -31835

Server --> Client: He ich sen jetz b ok?
Client --> Server: OK wenn du willst ich bin bereit.
Server --> Client: -31835

ist doch ganz einfach.

Mfg mknjc
Ich nutze PureBasic 4.02 unter Linux und Windows.

Momentane Projekte:
Das geheimste aller geheimen Projekte... FPBC
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

na da brauchst du soetwas wie ein protokoll. bevor du ins telefon sprichst mußt du ja jemanden anrufen, und wenn bei ihm das telefon klingelt, weiß er dass du anrfust (vereinbarung/protokoll). du willst den wert ja aus einem bestimmten grund schicken, also aus einer bestimmten situation heraus. server und client müssen ja beide wissen worum es grad geht. der empfänger weiß zum beispiel was er bekommt, wenn er es vorher sowieso angefordert hat. oder du machst einfach einen header, der den wertebereich angibt, oder der generell auskunft gibt über die gesandten daten.

[ungetestet:]

Code: Alles auswählen

      *buff=AllocateMemory(256) ; 9 byte würde hier auch reichen
      
      If *buff
        PokeB(*buff, SizeOf(var) )
        PokeQ(*buff+1, var) )
        erg=SendNetworkData(Verbindung, *buff, 9 )
        If erg<>9
          ;...

Code: Alles auswählen

      myByteVar.b
      myLongVar.l
      
      *buff=AllocateMemory(256)
      
      If *buff
        erg=ReceiveNetworkData(Verbindung, *buff, 9 )
        If erg<>9
          ;...
        Else
          size=PeekB(*buff)
          Select size
            Case 1
              myByteVar=PeekB((*buff+1)
            Case 4
              myLongVar=PeekL((*buff+1)
            ;...
ich verschicke hier immer 9 byte, wovon das erste byte speichert, um was es sich für eine variable handelt. du könntest in diesem byte ja auch werte wie -1 oder 1002 oder -45 speichern. wenn sender und empfänger jeder eine (die selbe) tabelle besitzen, die dem header wert bestimmte aktionen zuweist. dann weiß der empfänger immer "aha im headerbyte seht eine -12, also lese ich ab der headeraddresse+1 den wert für die user-anzahl in meine dafür vorgesehene variable vom typ long."
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Killfrog
Beiträge: 12
Registriert: 20.06.2006 21:04

Beitrag von Killfrog »

schade hatte gehoft es ginge einfacher :freak:
aber wies aussieht muss ich doch wie ich zuanfang vermutet hatte so ein "versandsystem" basteln ^^
trotzdem danke an euch :allright:
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

wie kompliziert das wird, hängt nur davon ab wozu du es brauchst.
wenn du verrätst was du machen willst, kann man das vielleicht auch vereinfachen.
my pb stuff..
Bild..jedenfalls war das mal so.
Antworten