UDP Sendemöglichkeiten
Übersicht

![]() |
GeeeckoBetreff: UDP Sendemöglichkeiten |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
So, da dies hier nichts mit einem Blitz Programm zu tun hat (Naja, man kann es dafür verwenden ![]() poste ich es hier. Wie benutzt man UDP (So das jede Nachricht ankommen sollte)? Ich habe mir das so vorgestellt: Client: Sendet Nachricht mit einem Code. Unter dem Code speichert die die nachricht ab, und sendet so lange, bis der servee per tcp ein okay + code schickt. dann hört er auf. Das gleiche macht der Server dann wieder mit allen anderen clients (die auch im netzwerk sind). Gegoogelt und so habe ich, möchte es aber mal ohne code und so... und verschiedene Möglichkeiten. Danke ![]() |
||
.... |
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann kannst du auch gleich TCP nehmen xD
Ist glaub ich schneller ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie würdest du es denn machen? ![]() |
||
.... |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist eine Möglichkeit wenn der Client eine Nachricht schicken muss die groß ist und besonders schnell gesendet werden soll. Bei kleinen Nachrichten aber ist das Unsinn, denn da kannst du auch gleich TCP verwenden.
Bei einem Spiel bspw. einem Shooter wo prioritätsgeordnete Nachrichten zum Einsatz kommen(Spielerposition = unwichtig, Spieler ist tot = wichtig) musst du dir ein Protokoll ausdenken dafür. Bei einer hohen Priorität muss dann halt mit NachrichtenIDs gearbeitet werden, die mit einem Acknowlege vom Empfänger bestätigt werden müssen. Das ganze ist aber schwer zu verwalten da du jede Situation abdecken musst mit dem Protokoll. Ein Beispiel: Der Sender schickt eine wichtige Nachricht und der Server ist offline. Ein "dummes" Protokoll würde dennoch die Nachricht versuchen weiter zu senden. Auch zu überlegen, welche Nachricht zu erst abgearbeitet werden muss usw. gehört alles in die Protokollplanung und ist eigentlich auch nichts für Anfänger. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mhhh... Also das mit Spieler = TOT würde ich mit TCP machen...
ebnso wie zum Beispiel nen Chat. Spieler Pos. müsste ich dann nur über UDP machen. Aber dann müsste ich ja jede 5px (mindestens) eine nachricht schicken. weil ich denke, das mehr als 5 px schon was aus machen |
||
.... |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich mache das so:
Ich teile die Nachrichten in zwei Typen auf. Typ I ist unwichtig, ganz normales UDP wobei das Risiko in kauf genommen wird, dass Nachrichten verschwinden. Bei Typ II hingegen sind sämtliche Nachrichten durchnummeriert, der Server speichert alle solchen Nachrichten in einen Buffer, aus dem sie erst ausgelesen werden, wenn zwischen der letzten ausgelesenen und der "ältesten" im Buffer keine Lücke besteht. Jede Nachricht von Typ II, die der Client versendet, wird bei ihm zwischengespeichert, und zwar so lange, bis er vom Server die Bestätigung erhält, dass diese Nachricht ankam. Nachrichten, die in diesem Buffer gespeichert sind, werden in einem Intervall von 200-500ms wiederholt gesendet. Natürlich kann es dann vorkommen, dass beim Server eine Nachricht mehrmals ankommt, deshalb werden solche, die beim Server schon im Buffer liegen oder älter sind, als die zuletzt ausgelesene Nachricht, gleich beim Empfang verworfen. Zum Versenden von Dateien mach ichs dann folgendermassen: 1. wird die Dateianfrage gesendet. (Typ II) 2. bestätigt der Server die Dateianfrage, in dem er die Dateigrösse schickt. (Typ II) 3. fragt der Client alle Bytes dieser Datei an. (Typ II) 4. sendet der Server alle angeforderten Bytes in kleinen Päckchen an den Empfänger. Und zwar mit Offset und Grösse, damit dieser weiss, wo einordnen. (Typ I) 5. Hat der Server bei sich keine Anfragen mehr rumliegen, sendet er den Befehl zum Beenden der Übertragung. (Typ II) 6. Damit aber die ganze Datei komplett ankommt, muss der Client jedesmal, wenn Bytes übersprungen wurden, oder wenn beim Beenden der Übertragung noch nicht alle da sind, die fehlenden erneut anfragen. 7. Schritte 4-6 werden wiederholt. Ich weiss ich weiss, ich habe die Begriffe Server und Client völlig missbraucht, denn oben beschriebenes trifft jeweils auf beide Programme zu. MfG |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group