UDP-Applikation hängt sich auf
Übersicht

![]() |
Kernle 32DLLBetreff: UDP-Applikation hängt sich auf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Blitzer !
Vor ein paar tagen hatte ich bei meinem Server-Client UDP-Testereien ein Problem. Sobald der Server an eine IP sendete, hängte sich das komplette Programm auf (das programm renderte noch, aber über die UDP-Streams wurde nichts mehr empfangen oder gesendet). Als ich den Fehler fand (falscher Variablenname) ging zwar wieder alles richtig, doch mir drängte sich da eine Frage auf. Warum schmieren die UDP-Streams ab, sofern man versucht an die IP 0 zu senden ? Bzw, kann sowas auch aus anderen Gründen passieren ? Und wenn ja, wie vermeide ich das ? So long, Kernle PS: Ist für mich sehr wichtig, da es für meine testereien essentiell ist, dass der server eine bestimmte Zeit absolut fehlerfrei läuft. |
||
Mein PC: "Bluelight" - Xtreme Gamer PC [Video]
Meine Projekte: Cube-Wars 2010 [Worklog] Anerkennungen: 1. Platz BCC #7 , 1. Platz BCC #22 , 3. Platz BAC #89 Ich war dabei: NRW Treff III, IV ; Frankfurter BB Treffen 2009 |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie wärs wenn du nur an existierende IPs schickst, weil sonst ist es illegal und eigentlich müsste der server einfach crashen aber vermutlich wartet das programm darauf vom netzwerk layer erst zurück zu kommen was es nie wird wenn du an inexistente orte schickst.
Eigener Computer is Localhost bzw. 127.0.0.1 |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Kernle 32DLL |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ich nicht an wildfremde ips senden soll ist mir schon klar. Aber was passiert wenn ein z.b. ein Spieler unerwartet die Verbindung beendet, und der Server immer noch auf eine nie kommende Antowort wartet ?
Nach diesem oben erwähnten "aufhänger" empfängt der Server ürpigens auch nichts mehr was über 127.0.0.1 kommt. Was trotsdem seltsam ist, ist das meine Windows Netzwerkverbindung trotsdem Sende UND Empfangs aktivität zeigt, die zu 100% von meinem Programm kommt (und nicht von anderen Programmen wie z.b. Browser, Games, etc.). Also was passiert da ? Was ich noch nicht getestet habe wäre eine re-init der UDP-Streams. Aber das bringt mir allerdings nichts wenn ich nicht weis wie ich meinem Programm beibringe rauszufinden ob die Verbindung hängt oder nicht. Außerdem darf sowas schlicht nicht passieren, also das die Verbindung einfach abbricht. Irgendetwas passt da nicht zusammen. So long, Kernle |
||
Mein PC: "Bluelight" - Xtreme Gamer PC [Video]
Meine Projekte: Cube-Wars 2010 [Worklog] Anerkennungen: 1. Platz BCC #7 , 1. Platz BCC #22 , 3. Platz BAC #89 Ich war dabei: NRW Treff III, IV ; Frankfurter BB Treffen 2009 |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Der Server wartet bei UDP auf garnichts. Er hat was er erhält. Es gibt bei UDP weder eine Empfangsgarantie noch eine Garantie das das was du empfängst korrekt ist.
Er kann auch nichts mehr empfangen danach. Deine Anwendung ist komplett gelockt, der Netzwerklayer wird nimmer zurück kehren wenn du versuchst nach tot (tot != eine ungültige IP) zu kommunizieren. Wär wie wenn du in nen Tunnel rein schreist, der gewunden ist und neben dir endet, aber unendlich lange ist und einfach so lange nichts machst bis du dein echo hörst. Wenn du einen Stream willst den du prüfen kannst, wirst du von UDP auf TCP wechseln müssen. Da UDP einfach blindlings versendet, wirds da ein wenig schwer, denn selbst wenn du der gegenseite beibringst zu antworten heisst das net, dass die antwort auch auf deine Seite durchkommst. Würde, wenn du UDP nutzen willst deswegen empfehlen die Blitz ENet Userlib zu nutzen. Damit kannst du Reliable (also garantiert zugestellte) Packete versenden und einige andere Dinge nutzen. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group