Problem mit UDP - Senden in einer Schleife.
Übersicht

![]() |
The_NiciBetreff: Problem mit UDP - Senden in einer Schleife. |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo, liebe Blitzer.
Ich will zur übertragung eines Schusssignals eine UDP-Nachricht solange senden, bis eine Bestätigung ankommt. Würde funktionieren, denkt man. Ist aber newshot=True friert das Spiel ein. Hier ein Codeausschnitt: Code: [AUSKLAPPEN] WriteLine outstrm, p1\x WriteLine outstrm, p1\y WriteLine outstrm, p1\hp WriteLine outstrm, p1\sicht SendUDPMsg outstrm, MasterIP, 7555 If newshot=True Then Repeat WriteLine outstrm, 14 SendUDPMsg outstrm, MasterIP, 7555 RecvUDPMsg(instrm) recv=ReadLine(instrm) Until recv=313 EndIf If RecvUDPMsg(instrm) <> 0 Then p2\x=ReadLine(instrm) p2\y=ReadLine(instrm) p2\hp=ReadLine(instrm) p2\sicht=ReadLine(instrm) EndIf If ReadLine(instrm)=14 Then a.schuss=New schuss a\x=p2\x a\y=p2\y a\richtung=p2\sicht While RecvUDPMsg(instrm)<>0 And ReadLine(instrm)=14 WriteLine outstrm, 313 SendUDPMsg outstrm, MasterIP, 7555 Wend EndIf Danke schonmal für eure Hilfe. |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aus dem Stegreif kann ich keinen Fehler erkennen. Halte mal das Programm mit Stop an, wenn RecvUDPMsg ungleich 0 ist (in der newshot=True - Schleife) bzw. lass dir anzeigen, wenn jemand eine Schussnachricht erhält. Es kann nämlich auch sein, dass beim Empfangen & Antowrten der Wurm drinsteckt.
Aber so wie du es jetzt gemacht hast, ist es ziemlicher Unsinn. Du schreibst pro Frame in den Stream, bis du eine Antwort erhältst - ohne zeitliche Verzögerung. Würde also ein PC in dieser Schleife 2000 Frames schaffen, hast du eine unglaubliche Netzwerküberlastung. Und das eine Programm anzuhalten, bis du Anwort erhältst, halte ich für übertrieben. Entweder du machst Types pro Netzwerknachricht und abarbeitest die ab (also du schaust, ob schon geantwortet wurde. Wenn nicht, dann schicke die Nachricht neu, wenn mehr als 100 ms seit dem letzten Verschicken vergangen sind) oder du benutzt eine UDP - Lib, die zuverlässig wie TCP funktioniert. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das mit der millisecs-grenze werde ich noch einbauen.
Und nein, ich benutze nicht die UDP-Lib. Ich machs mit dem UDP was in BB enthalten ist, weil ich nicht alles neu programmieren möchte. Und das Programm anzuhalten macht durchaus Sinn. Ansonsten haben die Lagger einen tollen Vorteil. Und wenn sie laggen dann können sie in der Zeit nicht weiterspielen. Mir piepegal. |
||
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du solltest nicht Impulsartig senden, sonst kommt es zu Nachrichtenstaus. Du solltest das so angehen;
pseudo- Code: [AUSKLAPPEN] Wenn MausEinsGedrückt() UND ServerInformiert=0 Dann SendeAnServer("Ich ballere..."):ServerInformiert=1 Ansonsten SendeAnServer("Ich ballere nichmehr..") |
||
Starfare: Worklog, Website (download) |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
mmh, UDP sendet nicht immer alle Daten, sprich es kommen nicht immer alle an.
Warum sollte ich dann Eine Variable auf True setzen, um dann dem Server zu schreiben, dass ich nichtmehr schiesse? Und wenn das Paket dann nicht ankommt? Gibts nen Schuss weniger. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group