Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 22, 2025 00:25

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 28, 2003 10:37 
Offline
DGL Member
Benutzeravatar

Registriert: Di Feb 25, 2003 15:10
Beiträge: 147
Wohnort: Koblenz a. Rhein
Kann man mit UDP nur einen String senden ? keine Variabeln oder sowas ?

Also müsste ich bei einem Game ( z.b. Shooter ) die Spielerposittion in einen String pappen ?
und jeder schuss bla bla bla... ? wie das ?

Ich hätte da eine Ideen aber die kostet bestimmt viel Rechenzeit...
(px: Playerposition y py:... pz)
einfach ..Send(px py pz) dann nach den Leerzeichen suchen
( aber bei jeder Bewegung das ganze durchkauen ?
kann man keine Variablen senden ?

thx und cya !

_________________
mir fällt kein Spruch mehr ein für meine Signatur :( naja... :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 28, 2003 10:45 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Es wäre hilfreich zu wissen, wie du deine Daten versenden willst. Über reine Socks über Indy... ein String wäre definitiv das falscheste was Du nehmen könntest ;)

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 28, 2003 10:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also man könnte natürlich ein Package für eine Variable verwenden aber das wäre eine ziemliche Verschwendung.

Ich persönlich würde den "string" als Binärinterpretieren. Weil so könntest du Zahlen ganz leicht und einfach auf ein geringeres Datenvolumen bekommen. Nebenbei würde auch noch der lästige Umcodierungsaufwand (Zahl -> Text -> Zahl) wegfallen.
Größere nahmhafte Spiele codieren das allerdings noch mal um Bandbreite zu sparen.

PS: Die Indiekomponenten bieten eine recht gute Sammlung zum Thema Netz.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 28, 2003 11:06 
Offline
DGL Member
Benutzeravatar

Registriert: Di Feb 25, 2003 15:10
Beiträge: 147
Wohnort: Koblenz a. Rhein
oh ... hab ich doch glatt vergessen zu schreiben :D
ich benutze das idUDPClient und Server .. also Indy...

wie bekommen ich das in Binärdaten versenden ?
die function Send erwartet einen String..

_________________
mir fällt kein Spruch mehr ein für meine Signatur :( naja... :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 28, 2003 11:10 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Man kann eigentlich jeden beliebigen Datentype über UDP senden.
Bei dem sendto Befehl gibt man ja Addresse und Länge des Buffers an, den man an eine bestimmte IP Addresse senden möchte.
Da ist es am besten, wenn man die Position direkt als Vector versendet und nicht erst als String speichert.
Vielleicht kann man ja bei den Indy Komponenten das Socket Handle herausfinden und dann über sendto die Daten direkt senden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 28, 2003 12:13 
Offline
DGL Member
Benutzeravatar

Registriert: Di Feb 25, 2003 15:10
Beiträge: 147
Wohnort: Koblenz a. Rhein
idUDPClient.SendBuffer(); kann wohl (typenlose) Buffer versenden...
es braucht (Buffer , AByteCount : Integer);

soll bei buffer einfach die variable rein ?
und bei bitcount ? wie bekomm ich das raus ?

cya

_________________
mir fällt kein Spruch mehr ein für meine Signatur :( naja... :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 28, 2003 12:18 
Offline
DGL Member
Benutzeravatar

Registriert: Di Feb 25, 2003 15:10
Beiträge: 147
Wohnort: Koblenz a. Rhein
Ah ! habs ^^
SendBuf(Variable, sizof(variable));
scheint zu funztn


cya !

_________________
mir fällt kein Spruch mehr ein für meine Signatur :( naja... :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 28, 2003 13:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ja genau das. In Variable kannst du alles reinwerfen wonach dir ist. Also String, PChar, Pointer, Arrays etc. Aber bei so etwas solltest du aufpassen, dass der Typ auch am Stück im Speicher liegt. Array of Array of single. Zum Beispiel kann verstreut im Speicher liegen.

Aber Vorsicht SizeOf liefert bei Pointer immer 4 zurück. Also die Größe des Pointers nicht die Größe vom Inhalt. Auch wenn der Pointer nil ist wird 4 zurückgegeben.

Am Besten wäre es wohl, wenn man die gesammten Daten erst einmal sammelt und die dann in einem SendBuffer schickt. Dabei würde man auch gewehrleisten können, dass so wenig wie möglich Pakete geschickt werden würden. Wobei UDP (wie bereits schon mal erwähnt) ein Protokoll ist, bei dem es nicht sichergestellt ist, dass auch wirklich alle Pakete ankommen. Es kann sein, dass das ein oder andere Paket mal im Netz verschwunden bleibt. Das solltest du beim Designen deiner Pakete auch berücksichtigen. Sprich deine Anwendung darf sich davon nicht stören lassen, wenn auf einmal ein Paket fehlt. Andernfalls solltest du TCP verwenden. Dort ist es sichergestellt. Dafür hast du aber auch ein wenig höhere Netzlast.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 28, 2003 16:06 
Offline
DGL Member
Benutzeravatar

Registriert: Di Feb 25, 2003 15:10
Beiträge: 147
Wohnort: Koblenz a. Rhein
is schon klar dass paar verloren gehen ...
wird aber ein shooter also nich so tragisch :D
wenn da 1 von 20 positionen ma nich ankommen merkt keiner..
wenns aber paar nacheinander sind ( siehe Half-Life :D ) gibts schöne lags :D

_________________
mir fällt kein Spruch mehr ein für meine Signatur :( naja... :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 28, 2003 16:23 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Für die meisten Ereignisse wie Tastatureingaben vom Client zum Server oder Entity Updates die sowieso jeden Frame kommen macht das nichts aus. Nur wenn ein Level gewechselt wird, ein neues Entity hinzukommt oder gelöscht wird, usw... muß die Nachricht angekommen.
Man kann jeder gesendeten Nachricht eine Nummer geben und zusätzlich immer die Nummer der zuletzt empfangenen Nachricht mitschicken. Dann fällt das auf, wenn eine Nachricht fehlt.
Bei Quake 1 ist übrigends immer nur eine sichere Nachricht zur gleichen Zeit unterwegs. Das scheint aber zu reichen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 28, 2003 16:38 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
NiGhTmArE hat geschrieben:
is schon klar dass paar verloren gehen ...
wird aber ein shooter also nich so tragisch :D
wenn da 1 von 20 positionen ma nich ankommen merkt keiner..
wenns aber paar nacheinander sind ( siehe Half-Life :D ) gibts schöne lags :D

Zitat:
wenns aber paar nacheinander sind ( siehe Half-Life  ) gibts schöne lags

Nein, das passiert bei einer kommerziellen Engine nicht.Kommerzielle Engines wie die Unreal-, Quake oder HL-Engine (wobei die von HL ja auf Quake basiert) haben so ne Art Bewegungsvorhersage, und berechnen dann an jedem Client (und Server) die Spielerposition und gleichen diese dann an wenn ein neues Positionspaket ankommt.
Bei hohen Pings sieht man dann ja oft, das ein Spieler vor einem steht und dann ganz plötzlich wieder weg ist.Das liegt dann daran, das die Bewegungsvorhersage des Netzwerkcodes damit gerechnet hat, das sich der Spieler stetig in seine aktuelle Richtung weiterbewegt.Da das dann aber z.B. nicht der Fall war und der Spieler stehen geblieben ist, hat die Vorhersage fehlgeschlagen.

Für ein kleines Freizeitprojekt ist eine solche Bewegungsvorhersage allerdings eine viel zu komplexe Sache und eigentlich auch ein eigenes Gebiet für sich.In NapalmBomber3D schick ich auch nur in regelmäßigen Abständen die Spielerposition zum Server.Wenn da mal wegen hohem Ping oder starkem Netzwerktraffic ein paar Pakete nicht ankommen, macht das ja nichts aus, mal davon agesehen das die Bewegung etwas ruckeliger wird.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Google [Bot] und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.019s | 18 Queries | GZIP : On ]