Netzwerkverzögerung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

PowerProgrammer

Betreff: Netzwerkverzögerung

BeitragSo, Sep 24, 2006 12:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab hier mal ein voll peinliches Problem. Hab mal versucht was kurz mitm Netzwerk zu testen, aber es will nicht richtig:

BlitzBasic: [AUSKLAPPEN]
;*************************************************************************
;*** Test Verbinden ******************************************************

Type NetUser
Field Stream
Field IP$
Field Name$
Field Time
End Type


Const GamePort = 4355

Global AnzSpieler = 0

Global NetHost = 0
Global NetHostIP$ = "127.0.0.1"
Global NetHostConnection, NetConnection

If NetHost = 1 Then
NetHostConnection = HostConnect()
If NetHostConnection = 0 Then RuntimeError "Kann nicht hosten!"
EndIf


NetConnection = ClientConnect(NetHostIP$,"TestuserC")
If NetConnection = 0 Then RuntimeError "Kann keine Verbindung herstellen!"



;**************************************************************************************************
;**************************************************************************************************
;*** Hauptschleife ********************************************************************************
;**************************************************************************************************
;**************************************************************************************************

DebugLog "OK!"

NetTime = MilliSecs()
NetPingTime = MilliSecs()

Repeat

LoopTime = MilliSecs()
msX = MouseX()
msY = MouseY()
msH = MouseHit(1)

If MilliSecs() - NetTime > 300 Then
NetTime = MilliSecs()

If NETHost = 1 Then
; Gucken, ob User beitreten möchte
NeuerUser = AcceptTCPStream(NetHostConnection)
If NeuerUser Then
Neuling.NetUser = New NetUser
Neuling\Stream = NeuerUser : DebugLog "Stream: "+Neuling\Stream
Neuling\IP$ = DottedIP(TCPStreamIP(NeuerUser)) : DebugLog "IP: "+Neuling\IP$
Neuling\Time = MilliSecs() : DebugLog "Time: "+Neuling\Time
EndIf

For Benutzer.NetUser = Each NetUser
If ReadAvail(Benutzer\Stream) Then
Nachricht$ = ReadLine(Benutzer\Stream)
If Nachricht$ <> "" Then
Select Upper(Mid(Nachricht$,1,5))

Case "\JOIN"
Benutzer\Name$ = Mid(Nachricht$,7) : DebugLog Benutzer\Name$+" ("+Benutzer\Stream+")"

Case "\CHAT"
For Benutzer2.NetUser = Each NetUser
;If Benutzer2\Stream <> Benutzer\Stream Then
WriteLine Benutzer2\Stream, Nachricht$
;EndIf

Case "\EXIT"
DelUser(Benutzer.NetUser,Mid(Nachricht$,7))

Case "\PING"
Benutzer\Time = MilliSecs()

End Select
End If
EndIf
If Benutzer\Time - LoopTime > 4000 Then DelUser(Benutzer.NetUser,"System: User antwortet nicht!")
If Benutzer\Name$ = "" And Time - Benutzer\Time > 3000 Then Delete Benutzer.NetUser : DebugLog " Der User mit dem Stream "+Benutzer\Stream+" wurde gelöscht!"
Next
EndIf


If ReadAvail(NetConnection) Then
Nachricht$ = ReadLine(NetConnection)
If Nachricht <> "" Then

Select Upper(Mid(Nachricht$,1,5))

Case "\CHAT"
DebugLog Mid(Nachricht$,7)

End Select

EndIf
EndIf

EndIf

; Ping senden, damit Server weiß, das ich noch da bin
If LoopTime - NetPingTime > 2500 Then
NetPingTime = MilliSecs()
WriteLine NetConnection, "\PING"
EndIf

If KeyHit(57) Then WriteLine NetConnection, "\CHAT MäX: asdf" : DebugLog "Sende String..."

Delay 20
Flip

Until KeyHit(1)
End






Function HostConnect%()
Result = CreateTCPServer(GamePort)
If Result = 0 Then Result = CreateTCPServer(GamePort)
Return Result
End Function

Function ClientConnect%(IP$,Name$)
Result = OpenTCPStream(IP$,GamePort)
If Result = 0 Then Result = OpenTCPStream(NetHostIP$,GamePort)
If Result Then WriteLine Result, "\JOIN "+Name$ ; "/JOIN V 'MyName'"
Return Result
End Function

Function DelUser(User.NetUser,ExitText$)
For Benutzer.NetUser = Each NetUser
WriteLine NetConnection, "\EXIT "+User\Name$+" "+ExitText$
Next
Delete User.NetUser
End Function


Function DebugLog(LogStr$)
Print LogStr$
End Function

Boardsuche hat nix ausgespuckt Sad

Der Code ansich funzt, nur ist er verzögert. Wenn das Programm als Server sich selbst joinen will, kommt keine Meldung. Die kommt erst, wenn eine weitere Instanz des Programms als Client joint. Dann kommen zwei meldungen.

Ich weiß auch, dass das nicht sonderlich ausgeklügelter Code ist Laughing

Ach ja, beim testen: ihr müsst für den Server einmal die Var "NetHost" auf 1 setzen und für den Clienten auf 0.

Ich hoffe, mein problem ist allgemein verständlich.

Danke schonmal, MäX

P.S. Ich bin schon bereit, mich zu verkriechen.
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group