Problem mit UDP - Senden in einer Schleife.

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

The_Nici

Betreff: Problem mit UDP - Senden in einer Schleife.

BeitragMi, Dez 05, 2007 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Dez 05, 2007 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Dez 05, 2007 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Dez 05, 2007 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Dez 05, 2007 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group