Probleme mit bnetex?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

bruce85

Betreff: Probleme mit bnetex?

BeitragFr, Feb 24, 2012 2:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich hänge schon seit paar Stunden an ein Problem, ich möchte an alle Clienten etwas schicken, das funktioniert auch, aber so bald es 2 mal ausgeführt wird, bleibt das Spiel beim Clienten hängen.

Damit sende ich die Daten an alle Clienten:
BlitzMax: [AUSKLAPPEN]
'Spieldaten an alle Clienten senden
For Client = EachIn Clients
Client.WriteLine("6")
Client.WriteLine(MaxCardFeld)
Client.WriteLine(SpielerNr)
For Local i:Int=0 To MaxCardFeld-1
Client.WriteLine(Spielfeld[i].Frames)
Client.WriteLine(Spielfeld[i].Move)
Client.WriteLine(Spielfeld[i].AngleRichtung)
Client.WriteLine(Spielfeld[i].Angle)
Client.WriteLine(Spielfeld[i].AngleSpeed)
Client.WriteLine(Spielfeld[i].X)
Client.WriteLine(Spielfeld[i].Y)
Client.WriteLine(Spielfeld[i].DistX)
Client.WriteLine(Spielfeld[i].DistY)
Client.WriteLine(Spielfeld[i].ZielX)
Client.WriteLine(Spielfeld[i].ZielY)
Next
While Client.SendMsg() ; Wend
Next


und hier lese ich die Daten beim Clienten aus:
BlitzMax: [AUSKLAPPEN]
Case 6
MaxCardFeld = Int(Client.ReadLine())
SpielerNr = Int(Client.ReadLine())
For Local i:Int=0 To MaxCardFeld-1
Spielfeld[i].Frames = Int(Client.ReadLine())
Spielfeld[i].Move = Int(Client.ReadLine())
Spielfeld[i].AngleRichtung = Int(Client.ReadLine())
Spielfeld[i].Angle = Int(Client.ReadLine())
Spielfeld[i].AngleSpeed = Float(Client.ReadLine())
Spielfeld[i].X = Float(Client.ReadLine())
Spielfeld[i].Y = Float(Client.ReadLine())
Spielfeld[i].DistX = Float(Client.ReadLine())
Spielfeld[i].DistY = Float(Client.ReadLine())
Spielfeld[i].ZielX = Float(Client.ReadLine())
Spielfeld[i].ZielY = Float(Client.ReadLine())
Next

das ist jetzt nur ein teil von meinem Code, das ich hier gepostet habe.

Ich denke, sobald MaxCardFeld > wie 1 ist, weil die Packete werden ja dann mehrmals gesendet und dann hängt sich das Spiel beim Clienten auf.
Woran könnte das denn liegen?

Ich danke euch schonmal im Voraus.

MfG
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250
 

Lion

BeitragFr, Feb 24, 2012 2:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Uh...
Also erstmal würde ich an deiner Stelle die ganzen Read/WriteLines zu den tatsächlichen Datentypen machen, spart später ungemein Traffic und ist wesentlich sauberer.
Davon abgesehen lässt sich nur schwer erkennen, wo da jetzt genau etwas hängen soll. Hängt es in der Schleife? Beim empfangen (was ja in dem Code nicht wirklich drin ist)? Oder danach?
Bitte versuch mal mit Print genau festzustellen, ab wo das Programm nicht mehr weiterläuft Smile
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb
AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x

Tankbuster

BeitragFr, Feb 24, 2012 4:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Wann genau bleibt das Spiel hängen?

Bleibt es einfach hängen, oder stürzt das Programm ab?



Wenn es beim Start eines zweiten Programms auf dem selben PC zum Stillstand kommt, dann kann das an einem sehr Fehlerhaften Anmelde-Verhalten des Clients liegen, sodass beim Server Client 1 von Client 2 quasi überschrieben wird, weil beide die selbe IP haben, und dann alle Daten nurnoch bei Client 2 ankommen.

Es ist auch möglich, dass sich Client 2 garnicht starten lässt, weil er z.B. auf dem selben Port wie Client 1 läuft.

Es gibt da tausende Möglichkeiten...

Um dir zu helfen benötigen wir wahrscheinlich mehr Infos. Außerdem hat mein Vorposter recht, du kannst mehr als 50% Traffic einsparen, wenn du alles in Ints/Floats/Bytes überträgst....
Twitter
Download Jewel Snake!
Windows|Android
 

bruce85

BeitragFr, Feb 24, 2012 5:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich danke euch für die antworten.
Es funktioniert jetzt einigermaßen, ich habe das jetzt alles mit ReadInt... ReadFloat u.s.w. gemacht.

Eine Fragen habe ich noch:
1. Wenn ich ReadString benutze, dann hängt sich das ganze Programm auf, wie läuft das genau ab mit ReadString? Sobald ich ReadString verwende, dann funktioniert mein Spiel nicht mehr richtig, also die Daten kommen dann nicht mehr richtig an.
BlitzMax: [AUSKLAPPEN]
C.Typ = ReadString(Client,l)
WriteString(Client,C.Typ)


Edit: Komischerweise funktioniert es aufeinmal. Rolling Eyes

Ich danke euch trotzdem für die Hilfe.

MfG
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250
 

Lion

BeitragFr, Feb 24, 2012 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
bevor du readstring benutzt musst du die stringlänge vorher schicken, damit die andere seite weiß, wie lang die zeichenkette ist.
Falls du das nicht tust, wird es zwangsläufig zu problemen kommen, ich weiß jetzt nicht, wie du das gelöst hast, aber naja.

BlitzMax: [AUSKLAPPEN]
Client.WriteByte(Len(str))
Client.WriteString(str)

[...]
Local recv_str$=Client.ReadString(Client.ReadByte())

Nur so, falls es zu weiteren problemen kommen sollte Smile
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb
AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x
 

bruce85

BeitragFr, Feb 24, 2012 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Dir.
Ich sende ja die länge des Strings mit, es funktioniert ja jetzt. Wink

MfG
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group