[B+]Server-client problem (selbsterledigt)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

s_m_w

Betreff: [B+]Server-client problem (selbsterledigt)

BeitragFr, Jun 23, 2006 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo und so,
Ich habe mir mal ein kleines server-client system geschrieben, nur wird es mit meinem jetzigen code komplett aufgehängt, bis der neue client komplett verbunden ist, jemand eine Idee wie ich das bessern könnte?
Server:
Code: [AUSKLAPPEN]
Type stream
  Field Stream
  Field Name
  Field id
  Field Ping
End Type

svrGame=CreateTCPServer(8080)
If svrGame<>0 Then
  Print "Server erfolgreich gestartet"
Else
  Print "Server konnte nicht gestartet werden"
  End
End If

Global t1,t2,t3,t4

While Not KeyHit(1)
strStream=AcceptTCPStream(svrGame)
If strStream Then
   s.stream=New stream
   s\Stream=strStream

   t1=0:t2=0
   While Not ReadAvail(strStream)
     t1=MilliSecs()
     If t1>t2+5000 Then
       t2=MilliSecs()
       Print "Warte auf connect anfrage"
     EndIf 
   Wend

   If ReadString(strStream)=Chr(187)+"Connect" Then
     s\id=CheckId()
     WriteString(strStream,s\id)
   Else
     ;Weg damit
     Kick(s\Stream)
     Delete s.Stream
     Print "Erroneus connect"
     Gosub err1
   EndIf

   t3=0:t4=0
   While Not ReadAvail(strStream)
     t3=MilliSecs()
     If t3>t4+5000 Then
       t4=MilliSecs()
       Print "Warte auf Namen"
     EndIf 
   Wend

   temp=ReadString$(strStream)
   s\Name=temp
   s\Ping=1
   Print "Neuer stream: "+s\Name
EndIf
.err1
t1=MilliSecs()
If t1>t2+5000 Then
  t2=MilliSecs()
  Print "Sende daten an alle streams (Ping Pong)"
  For s.stream=Each Stream
     ; Alle löschen die keinen ping mehr haben
     If s\Ping=0 Then
       Print "Client "+ s\id +" disconnected ("+ s\Name +")"
       Delete s.stream
     Else
       ;Nächsten Ping senden
       Print "Sende an client "+ s\id+ " ("+ s\Name +")"
       WriteString s\stream,Chr(187)+"Ping?"
       s\Ping=0
     EndIf
  Next
EndIf

For s.stream=Each Stream
  If ReadAvail(s\Stream) Then
    If ReadString(s\Stream)=Chr(187)+"Pong!" Then
      s\Ping=1
      Print "Pong von client "+s\id+" bekommen"
    EndIf
  EndIf
Next

Wend

CloseTCPServer svrGame
End

Function CheckId()
  x=0
  For s.stream=Each stream
    If Not s\id=x Then
      Return(x)
    EndIf
    x=x+1
  Next
End Function

Function Kick(stream)
  WriteString(stream,Chr(187)+"kicked")
End Function


Client:
Code: [AUSKLAPPEN]


Global id

SeedRnd MilliSecs()
strmGame=OpenTCPStream("127.0.0.1",8080)
If strmGame<>0 Then
  Print "Client erfolgreich verbunden"
  Delay 10
  Print "Sende Anfrage"
  WriteString strmGame,Chr(187)+"Connect"
  Print "Warte..."

  While Not ReadAvail(strmGame)
    Delay 1
  Wend

  id=ReadString(strmGame)
  Print "Id bekommen: "+id
  Print "Sende Name"
  WriteString strmGame,Input("Name?") ;Ich sollte den Namen erst abfragen, dann senden, ich weiß
Else
  Print "Konnte keine Verbindung herstellen"
  WaitKey
  End
End If

While Not KeyHit(1)
  If ReadAvail(strmGame) Then
    Strng=ReadString(strmGame)
    If Strng=Chr(187)+"Ping?" Then
      WriteString(strmGame,Chr(187)+"Pong!")
      Print "Ping? Pong!"
    EndIf
    If Strng=Chr(187)+"kicked" Then
      Print "Kicked from server"
      CloseTCPStream strmGame
    EndIf
  EndIf
Wend
CloseTCPStream strmGame
End
Sheep Happens

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group