UDP Daten kommen nicht an

flash2910

Mitglied
Hallo Leute,

hab nen kurioses Problem:
Ich hab ein Programm programmiert, das mehrere UDP-Pakete hintereinander verschicken soll.
Das Problem: die Daten kommen nicht alle an. Wenn ich jetzt jedoch mit Thread.Sleep eine Pause zwischen die Sendungen lege, funktioniert es. Ist aber keine Option für mich, da die Clients in Echtzeit reagieren sollen, was ja damit nicht gewährleistet ist. Kennt jemand das Problem oder weiß, wie man das lösen kann?
Wäre für Hilfe dankbar

Grüße

Ich
 

flash2910

Mitglied
theoretisch schon - aber es wird so eine art online-game, da ist tcp ja eher schlecht. außerdem kanns das ja nicht sein - bei anderen programmen geht das auch. hat jemand ne idee?
 

Michael...

Top Contributor
Was heisst so eine "Art" Online Game? Eventuell ist TCP ja doch ausreichend.

Vorweg: Ich hab keinerlei Erfahrung mit UDP, aber UDP ist zwar ein "flaches" aber auch unzuverlässiges Protokoll. Wenn wichtige Informationen ankommen müssen, dann muss man sich selbst darum kümmern, z.B. wichtige Pakete solange und sooft abfeuern bis ein ACK von Client zurück kommt.

Dir mir bekannten Online Ego Shooter nutzen alle aufgrund der Echtzeitrelevanz UDP. Keine Ahnung welche Mechanismen zur Übertragung kritischer Daten da eingesetzt werden.
Aber vielleicht findet sich hier ein Experte...
 

Andi_CH

Top Contributor
Das hat UDP so an sich, das Daten verloren gehen können - du kannst ja als Übung einen Datensicherungslayer implementieren ;-)
Pakete fortlaufend nummerieren und wenn eines nicht ankommt einfach noch einmal anfordern.
 

ice-breaker

Top Contributor
wenn Daten wirklich verloren gehen dürfen (wie VoIP, Ego-Shooter) ist UDP sicherlich eine gute Wahl, muss man aber eine Datensicherungsschicht über UDP aufbauen (reliable UDP) kann man auch gleich auf TCP setzen, denn dann hat UDP einfach kaum noch einen Vorteil.

Und ob TCP zu langsam ist, würde ich mal austesten, i.R. sollte es vollkommen ausreichend sein, die Dateübertragungszeit ist das Problem, eher weniger der Protokolllayer.
Wenn bei TCP wenige Datenverluste auftreten ist der Overhead gegenüber UDP auch nur minimalst.
 
G

Gast2

Gast
Dir mir bekannten Online Ego Shooter nutzen alle aufgrund der Echtzeitrelevanz UDP. Keine Ahnung welche Mechanismen zur Übertragung kritischer Daten da eingesetzt werden.
was weg ist, ist weg ... nennt sich auch Laaaaaaaag ... wenn - dann "springen" Spieler wild zwischen zwei Stellen in der Map umher ... Spieler wegeben sich stupide gerade aus ... etc. ... der ganze Bewegungskram basiert auf Schätzungen, wo der Spieler sein könnte ... daher funktioniert auch der Autorenn-Mod von HL2 nicht wirklich ... weil da die Schätzungen anders funktionieren müssten

Aber vielleicht findet sich hier ein Experte...
nein - bin ich nicht
 
Zuletzt bearbeitet von einem Moderator:

flash2910

Mitglied
hm, danke für die vielen antworten.
das problem is bei mir nicht, dass EINIGE pakete nicht ankommen,
sondern dass nur das erste ankommt, und alle anderen nicht. und das kann man
wirklich nicht auf die arbeitsweise von udp schieben - da läuft ja irgendwo was schief.
wenn der empfänger wirklich zu langsam für den sender ist, kann man das empfangen irgendwie absichern?
 
G

Gast2

Gast
sondern dass nur das erste ankommt, und alle anderen nicht.
Dein Empfänger ist zu langsam - oder - Dein Sender ist zu schnell

und das kann man wirklich nicht auf die arbeitsweise von udp schieben
doch - weil genau diese Probleme verursacht UDP :rtfm:

da läuft ja irgendwo was schief.
ja - dein Empfänger ist zu langsam ... am Sender zu Schrauben bringt nichts :bahnhof:

wenn der empfänger wirklich zu langsam für den sender ist, kann man das empfangen irgendwie absichern?
ja - das Verhalten von TCP in UDP programmieren ... in dem Moment wird das mit UDP aber unsinnig - kannst Du auch gleich TCP verwenden :autsch:
 

flash2910

Mitglied
doof :( naja, dann werd ich das wohl doch mit ner kurzen pause zwischen den paketen machen. habs jetzt noch nicht getestet, aber ich denke das problem tritt nur auf, wenn viele pakete sehr kurzzeitig hintereinander an den selben empfänger geschickt werden. bekommen mehrere clients die pakete, die sehr kurz hintereinander geschickt werden, so müsste eigentlich alles funktionieren - oder hab ich da nen denkfehler?
 

flash2910

Mitglied
tu ich - ich habs jetzt mit kurzen pausen zwischen den paketen für die sendungen gelöst - passiert ja auch nicht die ganze zeit, sondern nur beim connecten mit dem server. ist zwar unschön, aber egal
 
G

Gast2

Gast
ich habs jetzt mit kurzen pausen zwischen den paketen für die sendungen gelöst
und das bringt was? ... nix ... was passiert wenn plötzlich alle Clients ein Paket senden ... oder synchronisierst Du die Clients untereinander, so das immer eine gewisse Zeit zwischen allen Paketen von allen Clients existiert? ... damit der Server auch alles verarbeiten kann

am Sender zu schrauben bringt nichts

passiert ja auch nicht die ganze zeit, sondern nur beim connecten mit dem server.
nein - das passiert öffter ... vgl. Murphy

ist zwar unschön, aber egal
mit egal geht die Welt unter
 

Empire Phoenix

Top Contributor
Hm alos theorie, der router wswtich ect hat nicht genug cahce und droppt einfach alles was nicht reinpasst. (Und ja mit java kann man auch uni router zum abstürzen/ddos bringen, von home routern mal ganz zu schweigen).

Ich würde ein duales system empfehlen, bau zwei verbindungen auf schick per tcp alles wichtige und per udp ales unwichtige, hat die Vorteile aus beiden welten für einen etwas höheren initial aufwand.
 

Dit_

Bekanntes Mitglied
Ich arbeite öfters mit UDP, wenn im spiele geht, dann ist UDP die erste wahl. Ohne Pause geht leider nicht, versuche die möglichst kurze Pause durch Testen einzustellen. Die UDP ist so eine art "unfaire" Verbindung, könnte sein, dass Pakete geblockt werden, weiss nicht, könnte vielleicht sein...
evtl muss du dafür sorgen dass die Pakete zu einem "Stream" gehören, vielleicht mal mit DatagramChannel versuchen.
 

flash2910

Mitglied
danke für die antworten.

1. mir egal, dass die welt untergeht :)
2. ich denke nicht, dass der server probleme mit verlorenen Paketen kriegt - es sind maximal 10 Clients geplant. und wenn doch mal eins verloren geht, is das au net soo schlimm - Wichtig sind nur die Daten, die der Server am Anfang an den Client ausliefert (die Map).
3. Glaub nicht, dass das Problem am Router liegt - es tritt auch auf wenn ich Server und Client auf dem selben Rechner laufen lasse.
4. irgendwo oben hat jemand die idee gepostet, eine art überprüfungsroutine für udp zu programmieren. das hab ich jetzt gemacht. der server schickt ein paket und wartet auf die bestätigung - dann schickt er das nächste usw. mein testkollege ist grad nicht da, aber ich denke das geht ganz gut. tcp zu nehmen is doch billig :p
 

ice-breaker

Top Contributor
4. irgendwo oben hat jemand die idee gepostet, eine art überprüfungsroutine für udp zu programmieren. das hab ich jetzt gemacht. der server schickt ein paket und wartet auf die bestätigung - dann schickt er das nächste usw. mein testkollege ist grad nicht da, aber ich denke das geht ganz gut. tcp zu nehmen is doch billig :p

dein verfahren ist deutlich ineffizienter als tcp.
Warum meint jeder das Rad neu erfinden zu müssen ???:L
 
G

Gast2

Gast
Warum meint jeder das Rad neu erfinden zu müssen ???:L
weil sonst irgend wann keiner mehr Räder herstellen kann und wir ein ernsthaftes Problem die nächsten 2 Mio. Jahre haben :rtfm: ... ab und zu muss man einfach (aus lerntechnischen Gründen) das Rad neu erfinden

gut - ich erfinde auch mal gerne das Rad neu (aus eben jenigen Grund oben) ... aber TCP auf UDP nachzubauen ist reine Zeitverschwendung und definitiv Fehleranfälliger als das Original ... mal abgesehen davon ist TCP nichts weiter als UDP mit Fehlerkorrektur ... beide Pakete verhalten sich im Netzwerk erstmal exakt gleich :reflect:
 

ice-breaker

Top Contributor
TCP Pakete werden erstmal genau so losgejagt wie UDP Pakete

werden sie nicht, schau dir mal TCP genau an ;)
TCP hat eine Flusskontrolle um das Überschwemmen des Empfängers wie bei UDP zu verhindern, es dürfen nur eine gewisse Anzahl an unbestätigten Paketen verschickt werden, danach muss der Sender warten, das ganze nennt sich Sliding Window Verfahren und ist eine echt geniale Sache.

wenn was schief läuft werden beide Pakete vom Netzwerk weggeschmissen ... und dann greifen die Mechanismen von TCP
wenn das Paket defekt ist gebe ich dir Recht (falsche Checksumme), wenn die Pakete aber nur in der falschen Reihenfolge kommen greift wieder das Sliding Window Verfahren und ordnet die Pakete beim Empfänger einfach neu.
 

flash2910

Mitglied
man erfindet das rad neu, weils spass macht :)
das tcp protokoll ist bestimmt deutlich besser programmiert als meine in 5 min hingeschusterte methode mit udp, aber dann hab ich es selbst gemacht und das hilft mir mehr, als bei google "java tcp" einzugeben und das zweite suchergebnis aufzurufen, wo bereits ein kompletter code gepostet ist. ich mach das ja auch nicht um geld zu verdienen, sondern um was zu lernen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Daten kommen anders an als gesendert ?! Netzwerkprogrammierung 6
OnDemand Daten per API senden, parallel Netzwerkprogrammierung 9
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
Z Kann nicht Daten vom Server lesen Socket Netzwerkprogrammierung 10
S Daten über TCP/IP senden Netzwerkprogrammierung 3
B Daten an Javaprogramm per URI Aufruf übergeben Netzwerkprogrammierung 7
N websocket - keine Daten mehr nach ca 80 Sekunden Netzwerkprogrammierung 0
C Spezielle Daten aus Website entnehmen Netzwerkprogrammierung 5
H Daten auf einer Webseite eintragen Netzwerkprogrammierung 11
A Socket Daten in Textdokument speichern? Netzwerkprogrammierung 1
T Socket Java Programm hängt sich auf bei dem versuch von einem Socket scanner Daten zu erhalten. Netzwerkprogrammierung 1
J Daten von einem HTML-Textfeld abrufen Netzwerkprogrammierung 3
S Fakturierungsprogramm - Daten aktuell halten (blutiger Anfänger) Netzwerkprogrammierung 1
D Mit Server Daten austauschen Netzwerkprogrammierung 4
K Server liest Daten nicht Netzwerkprogrammierung 6
L HTTP Daten an Server übergeben Netzwerkprogrammierung 2
R Daten von Cloud laden Netzwerkprogrammierung 5
fLooojava Daten an ein Arduino im selben Netzwerk senden Netzwerkprogrammierung 1
X Daten können nicht sofort empfangen werden Netzwerkprogrammierung 1
S Server - Mehrere Klassen sollen Daten senden und empfangen Netzwerkprogrammierung 25
P Socket Best Practice: Daten bündeln Netzwerkprogrammierung 5
E Verfügbarkeit von Daten in Streams Netzwerkprogrammierung 4
F Daten aus Internetseiten auslesen Netzwerkprogrammierung 56
S Server Client Daten hin und herschicken Netzwerkprogrammierung 2
S Seltsames Verhalten beim Empfangen von Daten über DataInputStream Netzwerkprogrammierung 12
P Socket Daten senden mit ServerSocket? Netzwerkprogrammierung 2
H Daten an Textfeld einer Webseite schicken Netzwerkprogrammierung 2
A versch. Daten im Stream erkennen Netzwerkprogrammierung 2
D daten per post senden Netzwerkprogrammierung 3
M Senden von Daten nicht direkt möglich? Netzwerkprogrammierung 6
J Applet soll Daten auf Server ablegen - einfachster Weg fuer n00bs? Netzwerkprogrammierung 4
F Socket Daten über verschiedene IP's schicken Netzwerkprogrammierung 5
E Socket OutputSream abbruch.Wegen zuviel !empfangener! Daten? Netzwerkprogrammierung 10
C Client zu Client Daten übertragen Netzwerkprogrammierung 13
S Thread, Daten vom Socket lesen Netzwerkprogrammierung 2
S Socket XML-Daten und Parameter an Server schicken Netzwerkprogrammierung 3
M Objekt über Object-Stream, empfange "alte" Daten Netzwerkprogrammierung 2
P HttpClient - Daten einer Website "unvollständig" Netzwerkprogrammierung 5
P Server/Client Daten empfangen, wenn Daten gesendet werden Netzwerkprogrammierung 9
K Socket Daten lesen ohne Längenangabe Netzwerkprogrammierung 19
T RMI Effizenteste Übertragung von Daten Netzwerkprogrammierung 6
A Socket Client Server Connection wird aufgebaut aber keine daten geschickt. Netzwerkprogrammierung 5
B Socket Daten empfangen funktioniert nicht richtig - wo liegt der Fehler? Netzwerkprogrammierung 7
Kr0e Versenden von Daten übers Netzwerk Netzwerkprogrammierung 30
S HttpURLConnection POST splittet Daten in zwei Pakete Netzwerkprogrammierung 9
F POST-Daten sende Netzwerkprogrammierung 3
E HTTPS Debuggen (verschlüsselte Daten anzeigen)? Netzwerkprogrammierung 12
N Per POST -Methode Daten an den Web-Server übertragen. Netzwerkprogrammierung 9
Iron Monkey Große Daten ins Vector füllen Netzwerkprogrammierung 4
S Probleme beim senden von Daten per POST Methode an PHP Scrip Netzwerkprogrammierung 5
D Daten, die mit PHP erzeugt werden, mit Java auslesen Netzwerkprogrammierung 8
M Ethernet Daten abfangen Netzwerkprogrammierung 13
F Daten senden und empfangen mit Applet Netzwerkprogrammierung 8
I Problem beim empfangen von Daten (Zahlen) Netzwerkprogrammierung 7
S Daten per GET-Methode Netzwerkprogrammierung 2
H Server soll Daten schicken, aber wie? Netzwerkprogrammierung 47
M Socket schließt bevor Daten komplett geladen Netzwerkprogrammierung 5
C Flash Daten an Java senden, wie serialisieren? Netzwerkprogrammierung 3
E rxtx serielles senden von Daten Netzwerkprogrammierung 2
D Socket, Daten über BufferedWriter senden Netzwerkprogrammierung 18
G TCP Verbindung überprüfen OHNE daten zu verschicken Netzwerkprogrammierung 11
M Daten übers Netz verschlüsselt übertragen? Wie? Netzwerkprogrammierung 18
J Post-Daten an URL schicken Netzwerkprogrammierung 2
U Image erzeugen aus empfangenen Daten Netzwerkprogrammierung 7
A Wie werden Daten versendet? "Crashcode" Netzwerkprogrammierung 4
D Frage: Buffered Reader --> Wie komm ich an die Daten (Byt Netzwerkprogrammierung 3
G unvollständige Daten: Http Client-Server-Kommunikation Netzwerkprogrammierung 2
E Multi-Part Form-Daten mit HttpURLConnection Netzwerkprogrammierung 6
A Datenverlust (zuviele Daten!) über Sockets Netzwerkprogrammierung 4
T Daten über GSM verschicken Netzwerkprogrammierung 4
M Einfachste Möglichkeit aus'm Applet Daten an Server senden Netzwerkprogrammierung 6
P Verschiedene Daten über einen Stream Netzwerkprogrammierung 4
M Verliere Daten mit WinXP Netzwerkprogrammierung 10
O eingehende Daten speichern Netzwerkprogrammierung 3
D UDP-Daten anzeigen Netzwerkprogrammierung 2
D Daten per Server- Client nur als byte verschicken? Netzwerkprogrammierung 3
A daten an php script per post senden und ausgabe einlesen Netzwerkprogrammierung 6
T HTTPS-Requests an Server: POST-Parameter kommen nicht an Netzwerkprogrammierung 5
V Woher kommen diese Exceptions (StreamCorruptedException,OptionalDataException)? Netzwerkprogrammierung 1
S UDP Broadcast - Pakete kommen nicht immer an Netzwerkprogrammierung 15
S RMI RMI Aufrufe kommen nicht mehr durch Netzwerkprogrammierung 4
JavaDevOp Socket Status von UDP-Port prüfen (PortUnreachableException funktioniert nicht?) Netzwerkprogrammierung 32
A Bei FTP Übertragung wird Datei nicht komplett übertragen Netzwerkprogrammierung 2
B Multicast-Nachrichten-Empfang funktioniert nicht Netzwerkprogrammierung 5
M JAX-WS unter Java 17 plötzlich nicht mehr möglich Netzwerkprogrammierung 5
S BufferedStream funktioniert nicht immer Netzwerkprogrammierung 7
T OutputStream kommt nicht an Netzwerkprogrammierung 18
G UDP Packet empfangen funktioniert nicht. Netzwerkprogrammierung 16
L30nS RMI RMI-Server kann Dialog nicht volkommen anzeigen Netzwerkprogrammierung 2
L Server-Socket liest Input-Stream nicht Netzwerkprogrammierung 5
Tobero Java serversocket nicht nur zuganglich für localhost Netzwerkprogrammierung 6
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
S .jar läuft local, aber nicht remote (SSH/Terminal) Netzwerkprogrammierung 10
J SSL haut nicht hin Netzwerkprogrammierung 3
A Socket-Anwendung (BufferedWriter/Reader liest nicht aktuellen Wert) Netzwerkprogrammierung 6
platofan23 Socket Java Socket mit DynDns nicht erreichbar Netzwerkprogrammierung 6
J Wechsel auf Jdk13 , sfpt funktionier nicht mehr Netzwerkprogrammierung 2
Dann07 Proxy funktioniert nicht so wie gewünscht! Netzwerkprogrammierung 18
B RESTful API weiß nicht weiter Netzwerkprogrammierung 2
L Kann VM nicht ueber Host Name finden Netzwerkprogrammierung 0

Ähnliche Java Themen

Neue Themen


Oben