BnetEx - Client braucht 5 Sekunden für eine Nachricht?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

M0rgenstern

Betreff: BnetEx - Client braucht 5 Sekunden für eine Nachricht?

BeitragMi, Jun 20, 2012 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute,

Ich habe schon wieder ein Problem mit meinem Chat.

Undzwar sieht meine Hauptmethode für den Client so aus (ist ziemlich genau aus dem BNetEx Beispiel übernommen):
BlitzMax: [AUSKLAPPEN]
Method Run:Int()
Local Start:Int = MilliSecs()
DebugLog("*****")
DebugLog("Starting")

While ClientStream().SendMsg()
DebugLog("Sending Message")
Wend

Local Result:Int

If ((MilliSecs() - Start) > TIMEOUT) Then Throw("Timeout")


DebugLog("Before RecvAvail")
Local time:Int = MilliSecs()
Result = ClientStream().RecvAvail()
DebugLog("After RecvAvail: " + (MilliSecs() - Start))

If Result = -1 Then
Throw("Socket Error")
ElseIf Result > 0 Then
'Return 2
EndIf

DebugLog("After if: " + (MilliSecs() - Start))

While (ClientStream().RecvMsg())
DebugLog("Still Recieving Message.....")
Wend

DebugLog("After RecvMsg: " + (MilliSecs() - Start))

While Not ClientStream().Eof()
DebugLog("Reading...")
RecievedMessages().AddLast(TServerMessage.Create(ClientStream().ReadLine() + "~n"))
Wend
DebugLog("TimeNeeded: " + (MilliSecs() - Start))
DebugLog("******")
DebugLog("")
Return 0
End Method


Mein Problem ist jetzt: Diese Methode benötigt immer 5 Sekunden bis sie fertig ist.
Das Problem habe ich auch schon lokalisiert. Nämlich:
BlitzMax: [AUSKLAPPEN]

DebugLog("After if: " + (MilliSecs() - Start))

While (ClientStream().RecvMsg())
DebugLog("Still Recieving Message.....")
Wend

DebugLog("After RecvMsg: " + (MilliSecs() - Start))


Bei dem ersten Debuglog sinds noch 0 Sekunden und bei dem Debuglog hinter der Schleife dann immer ziemlich genau 5 Sekunden. Das kuriose: "Still Recieving Message....." wird mir nur ein einziges mal angezeigt: Nämlich dann, wenn der Server auch wirklich eine Nachricht sendet. Ansonsten hängt er an der Stelle nur 5 Sekunden und gibt nichts aus.

Kann mit bitte jemand helfen und eventuell erklären woran das liegt? Wenn der Server nichts sendet, dann braucht der Client doch auch nichts zu empfangen (außer das übliche "Hallo, noch da?").
Oder sehe ich das falsch?

Lg, M0rgenstern

BladeRunner

Moderator

BeitragMi, Jun 20, 2012 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
TCP ist blockierend, d.h. bei dem receive wird das Programm angehalten bis er mit dem zuhören fertig ist- was er wohl so nach 5 Sekunden abbricht.

Wenn ich mich nicht irre hatte Vertex aber selbst mal einen Thread eingestellt wie man TCP nichtblockierend mit bnetex nutzen kann. Forensuche sollte da helfen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

M0rgenstern

BeitragMi, Jun 20, 2012 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Bladerunner.

Vielen Dank für die Antwort.
Habe aber den Fehler gefunden: Wenn keine Bytes da sind, kann der ja ne Nachricht lesen soviel er will.

Es müsste so aussehen:
BlitzMax: [AUSKLAPPEN]
Result = ClientStream().RecvAvail()

If Result = -1 Then
Throw("Socket Error")
ElseIf Result = 0 Then
Return 0
EndIf


Denn wenn er keine Bytes zum lesen hat, dann braucht er die Funktion auch nicht weiter auszuführen.

Lg, M0rgenstern

EDIT:
Naja, das wars doch nicht.
Ich hab mir jetzt den Code von Vertex geladen und versuche da durchzublicken.

Dankeschön
 

Lion

BeitragMi, Jun 20, 2012 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du irgendwo den Timeout-Befehl gesetzt?
Ich meine, dass der dafür verantwortlich ist, bin mir aber gerade nicht sicher. Ich lasse den zumindest immer weg, weil der bei mir nur Probleme gemacht hatte...
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

M0rgenstern

BeitragMi, Jun 20, 2012 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
WOW.
Wahnsinn.
Vielen Dank. Genau das wars.

Jetzt funktioniert alles wie es soll.
Vielen Vielen Dank.

Lg, M0rgenstern

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group