netzwerk

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

Beitrag von Killfrog »

ist für nen spiel

ich will damit die koordinaten von dem spieler und die tasten die gedrückt sind verschicken
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Eine Structure erstellen, die Daten füllen, die Structure senden.
Auf beide seiten, server und client, die gleiche Structure.

Code: Alles auswählen

Structure udtDaten
  TimeStamp.l
  PosX.l
  PosY.l
  PosZ.l
  Text.s{20} ; Konstante länge. Text mit in der Structure
EndStructure

;...

Daten.udtDaten

;... 
len = SizeOf(udtDaten)

;...
Debug len
;SendNetworkData(ClientID, Daten, len)
FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

@mk-soft
geht das auch ohne @ vor 'Daten'?
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Killfrog
Beiträge: 12
Registriert: 20.06.2006 21:04

Beitrag von Killfrog »

das ist ja interessant :o

gleich mal ausprobieren thx

EDIT: k ich scheine damit nochnet so ganz klar zu kommen /:->

also hier meine probleme:
was ist das "Daten.udtDaten"?
wie verändere ich die werte der struktur ohne ein element davon zu erschaffen?
wie lese ich die ganze struktur beim host aus? :freak:
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

@#NULL

da Daten eine Strukture ist handelt es sich schon um ein Zeiger aud die Daten.
Daten und @Daten sind allso gleich.

@Killfrog

Schaue mal in der Hilfe nach Structure.

udtDaten ist der Aufbau der einzelnen Variablen die aneinandergehängt sind (udt User Data Type)

mit Daten.udtDaten wird dann erst der Speicherbereich Allokiert.

Zugriff der Variablen:

Daten\PosX = 1000
oder
x = Daten\Posx


P.S. Hatte in den letzten Tagen viel zu tun :|
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Killfrog
Beiträge: 12
Registriert: 20.06.2006 21:04

Beitrag von Killfrog »

kann es sein dass der buffer nicht überschrieben wird sondern neu empfangendes einfach hintendran geschrieben wird?

zB sende ich einmal "test" dann nochmal und dann ist im buffer "testtest".
PB:3.92
Benutzeravatar
tobe
Beiträge: 146
Registriert: 14.09.2006 17:33
Wohnort: Oktoberfest

Beitrag von tobe »

hi Killfrog,

ja das hast du richtig erkannt ;)
PureBasic 4.40 (Windows - x86)
Benutzeravatar
Killfrog
Beiträge: 12
Registriert: 20.06.2006 21:04

Beitrag von Killfrog »

hatte das netzwerk basteln ja erstmal sein gelassen ,doch kahm mir gestern eine idee.

bevor ich die idee nun teste und damit rumprobier frage ich euch ob das überhaupt klappen kann also:

ich sende alle meine gebrauchten variablen zusammengehängt und in fester reihenfolge bei jeder sendung und bastle dass dann beim empfang mit dem mid() befehl wieder auseinander. auf die art spare ich mir das erkennen welche variable da angekommen ist.

also würde das klappen? :D
PB:3.92
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

möglich....

aber mit Mid()-geschichten wirst du arg langsam sein...

besser wäre es, wenn du gleich nen kompletten speicherbereich sendest,
wo deine Vars eben hintereinanderliegen.

z.b. mit nem array:
erstelle dir ein array GameData.l(50)
da hast du dann alle benötigten variablen drin.
per netz musst du dann nur noch das array von 200byte länge verschicken,
packst es am ziel direkt in den korrespondierenden speicher,
und musst nicht mehr lange rumwuseln um nen string zu zerlegen,
sondern greifst direkt auf die einzelnen felder zu.

wenn die der name zu abstrakt ist, um ihn im prog zu verwenden,
bastel dir vielleicht ne spezielle struct.

Code: Alles auswählen

Structure Daten
  Player1X.l
  Player1Y.l
  Player1Head.l
  Player1HP.l
  Player2X.l
  Player2Y.l
  Player2Head.l
  Player2HP.l
EndStructure

Define GameData.Daten
;virtuelle funktion, die die daten in die struktur lädt
GetBuffer(@GameData)
;beispiel, wie die daten angewandt werden könnten
DisplaySprite(Player1Sprite, GameData\Player1X, GameData\Player1Y) 
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Toshy
Beiträge: 713
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Beitrag von Toshy »

Ähem ;-)
Hallo erstmal.
Also ganz ehrlich, du solltest dir einfach mal die Hilfedatei ansehen und unter "Referens" mal auf "Network" klicken. Dort stehen nicht nur alle Netzwerkfunktionen, sondern auch zwei Beispielcodes mit denen man sofort einen Server zum empfangen erstellt und einen Clienten der die Daten senden. Erstmal anschauen, verstehen und dann ändern. :-)
Ein paar kleine Daten zu senden ist im Grunde ganz einfach.
Gruß
Toshy
1. Win10
PB6.1
Antworten